]> jfr.im git - irc/quakenet/qwebirc.git/blobdiff - qwebirc/ajaxengine.py
Add maximum line lengths.
[irc/quakenet/qwebirc.git] / qwebirc / ajaxengine.py
index 4f91466d5a5dbec599b301b89ff1cf4a13ed229a..ff6bd8ef9718946002e66d949e02a4e2da61cbae 100644 (file)
@@ -12,6 +12,9 @@ def get_session_id():
 class BufferOverflowException(Exception):
   pass
 
+class IDGenerationException(Exception):
+  pass
+
 def jsondump(fn):
   def decorator(*args, **kwargs):
     x = fn(*args, **kwargs)
@@ -37,6 +40,9 @@ class IRCSession:
     self.cleanupschedule = None
 
   def subscribe(self, channel):
+    if len(self.subscriptions) >= config.MAXSUBSCRIPTIONS:
+      self.subscriptions.pop(0)
+
     self.subscriptions.append(channel)
     self.flush()
       
@@ -128,12 +134,17 @@ class AJAXEngine(resource.Resource):
         return [False, "Nickname not supplied"]
         
       nick = nick[0]
-      
-      id = get_session_id()
-      
+
+      for i in xrange(10):
+        id = get_session_id()
+        if not Sessions.get(id):
+          break
+      else:
+        raise IDGenerationException()
+
       session = IRCSession(id)
 
-      client = ircclient.createIRC(session, nick=nick, ident=ident, ip=ip, realname=nick)
+      client = ircclient.createIRC(session, nick=nick, ident=ident, ip=ip, realname=config.REALNAME)
       session.client = client
       
       Sessions[id] = session
@@ -170,6 +181,10 @@ class AJAXEngine(resource.Resource):
       except UnicodeDecodeError:
         decoded = command.decode("iso-8859-1", "ignore")
 
+      if len(decoded) > config.MAXLINELEN:
+        session.disconnect()
+        return [False, "Line too long"]
+
       try:
         session.push(decoded)
       except AttributeError: # occurs when we haven't noticed an error