Author: rfm
Date: Tue Jul 15 18:01:59 2014
New Revision: 37998

URL: http://svn.gna.org/viewcvs/gnustep?rev=37998&view=rev
Log:
minor fixup for logging

Modified:
    libs/webserver/trunk/ChangeLog
    libs/webserver/trunk/GNUmakefile
    libs/webserver/trunk/WebServerConnection.m

Modified: libs/webserver/trunk/ChangeLog
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/webserver/trunk/ChangeLog?rev=37998&r1=37997&r2=37998&view=diff
==============================================================================
--- libs/webserver/trunk/ChangeLog      (original)
+++ libs/webserver/trunk/ChangeLog      Tue Jul 15 18:01:59 2014
@@ -1,3 +1,10 @@
+2014-07-15 Richard Frith-Macdonald  <[email protected]>
+
+       * WebServerConnection.m: Fix minor error logging raw data ... we now
+       use backslash escapes to avoid problems wioth embedded nul characters.
+       * GNUmakefile: bump subminor version
+       Version 1.5.2:
+
 2014-05-08 Richard Frith-Macdonald  <[email protected]>
 
        * GNUmakefile: bump subminor version

Modified: libs/webserver/trunk/GNUmakefile
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/webserver/trunk/GNUmakefile?rev=37998&r1=37997&r2=37998&view=diff
==============================================================================
--- libs/webserver/trunk/GNUmakefile    (original)
+++ libs/webserver/trunk/GNUmakefile    Tue Jul 15 18:01:59 2014
@@ -21,7 +21,7 @@
 -include config.make
 
 PACKAGE_NAME = WebServer
-PACKAGE_VERSION = 1.5.1
+PACKAGE_VERSION = 1.5.2
 WebServer_INTERFACE_VERSION=1.5
 CVS_MODULE_NAME = gnustep/dev-libs/WebServer
 CVS_TAG_NAME = WebServer

Modified: libs/webserver/trunk/WebServerConnection.m
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/webserver/trunk/WebServerConnection.m?rev=37998&r1=37997&r2=37998&view=diff
==============================================================================
--- libs/webserver/trunk/WebServerConnection.m  (original)
+++ libs/webserver/trunk/WebServerConnection.m  Tue Jul 15 18:01:59 2014
@@ -44,6 +44,68 @@
 static Class GSMimeDocumentClass = Nil;
 static Class WebServerRequestClass = Nil;
 static Class WebServerResponseClass = Nil;
+
+static char *
+rawEscape(NSData *d)
+{
+  const uint8_t *bytes = (const uint8_t*)[d bytes];
+  uint8_t       *buf;
+  NSUInteger    length = [d length];
+  NSUInteger    size = length + 1;
+  NSUInteger    index;
+  NSUInteger    pos;
+
+  for (index = 0; index < length; index++)
+    {
+      uint8_t   b = bytes[index];
+
+      if ('\n' == b) size++;
+      else if ('\r' == b) size++;
+      else if ('\t' == b) size++;
+      else if ('\\' == b) size++;
+      else if (!isprint(b)) size += 3;
+    }
+  buf = (uint8_t*)malloc(size);
+  for (pos = index = 0; index < length; index++)
+    {
+      uint8_t   b = bytes[index];
+
+      if ('\n' == b)
+        {
+          buf[pos++] = '\\';
+          buf[pos++] = 'n';
+        }
+      else if ('\r' == b)
+        {
+          buf[pos++] = '\\';
+          buf[pos++] = 'r';
+        }
+      else if ('\t' == b)
+        {
+          buf[pos++] = '\\';
+          buf[pos++] = 't';
+        }
+      else if ('\\' == b)
+        {
+          buf[pos++] = '\\';
+          buf[pos++] = '\\';
+        }
+      else if (!isprint(b))
+        {
+          sprintf((char*)&buf[pos], "\\x%02x", b);
+          pos += 4;
+        }
+      else
+        {
+          buf[pos++] = b;
+        }
+    }
+  buf[pos] = '\0';
+  d = [[[NSData alloc] initWithBytesNoCopy: buf
+                                    length: size
+                              freeWhenDone: YES] autorelease];
+  return (char*)buf;
+}
 
 @implementation        WebServerRequest
 
@@ -1655,11 +1717,8 @@
 
   if (YES == conf->logRawIO && NO == quiet)
     {
-      int              len = [d length];
-      const char       *str = (const char*)[d bytes];
-
-      [server _log: @"%@ Data read %u bytes ... '%.*s' %@",
-        self, len, len, str, d];
+      [server _log: @"%@ Data read %u bytes ... '%s' %@",
+        self, (unsigned)[d length], rawEscape(d), d];
     }
   [self _didData: d];
 }
@@ -1796,12 +1855,9 @@
 {
   if (YES == conf->logRawIO && NO == quiet)
     {
-      int              len = [d length];
-      const char       *str = (const char*)[d bytes];
-
-      [server _log: @"%@ Data write %u bytes ... '%.*s' %@",
-        self, len, len, str, d];
-    }
+      [server _log: @"%@ Data write %u bytes ... '%s' %@",
+        self, (unsigned)[d length], rawEscape(d), d];
+   }
   [handle writeInBackgroundAndNotify: d];
 }
 


_______________________________________________
Gnustep-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs

Reply via email to