You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2010/01/05 10:38:38 UTC

svn commit: r895961 - /commons/sandbox/runtime/trunk/src/main/native/shared/sbuf.c

Author: mturk
Date: Tue Jan  5 09:38:37 2010
New Revision: 895961

URL: http://svn.apache.org/viewvc?rev=895961&view=rev
Log:
Guard against uninited sbuf

Modified:
    commons/sandbox/runtime/trunk/src/main/native/shared/sbuf.c

Modified: commons/sandbox/runtime/trunk/src/main/native/shared/sbuf.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/sbuf.c?rev=895961&r1=895960&r2=895961&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/sbuf.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/sbuf.c Tue Jan  5 09:38:37 2010
@@ -55,9 +55,9 @@
 #define SBUF_ISDYNAMIC(s)       ((s)->s_flags & ACR_SBUF_DYNAMIC)
 #define SBUF_ISDYNSTRUCT(s)     ((s)->s_flags & ACR_SBUF_DYNSTRUCT)
 #define SBUF_ISFINISHED(s)      ((s)->s_flags & ACR_SBUF_FINISHED)
-#define SBUF_HASOVERFLOWED(s)   ((s)->s_flags & ACR_SBUF_OVERFLOWED)
-#define SBUF_HASROOM(s)         ((s)->s_len  < (s)->s_size - 1)
-#define SBUF_FREESPACE(s)       ((s)->s_size - (s)->s_len  - 1)
+#define SBUF_HASOVERFLOWED(s)   ((s)->s_flags & ACR_SBUF_OVERFLOWED || (s)->s_buf == NULL)
+#define SBUF_HASROOM(s)         ((s)->s_len   < ((s)->s_size - 1))
+#define SBUF_FREESPACE(s)       ((s)->s_size  - ((s)->s_len  - 1))
 #define SBUF_CANEXTEND(s)       ((s)->s_flags & ACR_SBUF_AUTOEXTEND)
 
 /*
@@ -405,6 +405,8 @@
 {
 
     char *p = s->s_buf;
+    if (SBUF_HASOVERFLOWED(s))
+        return NULL;
 
     acr_sbuf_rtrim(s);
     acr_sbuf_finish(s);
@@ -431,10 +433,10 @@
 void
 acr_sbuf_finish(acr_sbuf_t *s)
 {
-
-    s->s_buf[s->s_len] = '\0';
-
-    SBUF_CLRFLAG(s, ACR_SBUF_OVERFLOWED);
+    if (s->s_buf) {
+        s->s_buf[s->s_len] = '\0';
+        SBUF_CLRFLAG(s, ACR_SBUF_OVERFLOWED);
+    }
     SBUF_SETFLAG(s, ACR_SBUF_FINISHED);
 }
 
@@ -772,10 +774,11 @@
 void
 acr_wbuf_finish(acr_wbuf_t *s)
 {
+    if (s->s_buf) {
+        s->s_buf[s->s_len] = L'\0';
 
-    s->s_buf[s->s_len] = L'\0';
-
-    SBUF_CLRFLAG(s, ACR_SBUF_OVERFLOWED);
+        SBUF_CLRFLAG(s, ACR_SBUF_OVERFLOWED);
+    }
     SBUF_SETFLAG(s, ACR_SBUF_FINISHED);
 }