You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ma...@apache.org on 2008/05/22 16:06:32 UTC

svn commit: r659112 - /webservices/axis2/branches/c/post_1_4_mtom/c/axiom/src/attachments/mime_parser.c

Author: manjula
Date: Thu May 22 07:06:31 2008
New Revision: 659112

URL: http://svn.apache.org/viewvc?rev=659112&view=rev
Log:
Fixing some bugs.

Modified:
    webservices/axis2/branches/c/post_1_4_mtom/c/axiom/src/attachments/mime_parser.c

Modified: webservices/axis2/branches/c/post_1_4_mtom/c/axiom/src/attachments/mime_parser.c
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/c/post_1_4_mtom/c/axiom/src/attachments/mime_parser.c?rev=659112&r1=659111&r2=659112&view=diff
==============================================================================
--- webservices/axis2/branches/c/post_1_4_mtom/c/axiom/src/attachments/mime_parser.c (original)
+++ webservices/axis2/branches/c/post_1_4_mtom/c/axiom/src/attachments/mime_parser.c Thu May 22 07:06:31 2008
@@ -284,29 +284,45 @@
 
     if((search_info->match_len2 == 0))
     {
-        /*Readusting the buffers for the next search and discarding the prevoius 
+        /*Readjusting the buffers for the next search and discarding the prevoius 
         buffers*/
 
         malloc_len = buf_array[buf_num] + len_array[buf_num] - pos - 4;
-        buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (
-            size + 1));
-        memcpy(buffer, pos + 4, malloc_len);
-        axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num);
-        buf_array[buf_num] = buffer;
-        len_array[buf_num] = malloc_len;                    
+        if(malloc_len > 0)
+        {
+            buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (
+                size + 1));
+            memcpy(buffer, pos + 4, malloc_len);
+            axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num);
+            buf_array[buf_num] = buffer;
+            len_array[buf_num] = malloc_len;                    
+        }
+        else
+        {
+            buf_array[buf_num] = NULL;
+            len_array[buf_num] = 0;
+        }
     }
 
     /*The pattern divides among two buffers*/
         
     else if(search_info->match_len2 > 0)
     {
-        malloc_len = len_array[buf_num] - search_info->match_len2;
-        buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (
-            size + 1));
-        memcpy(buffer, buf_array[buf_num] + search_info->match_len2, malloc_len);        
-        axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num);
-        buf_array[buf_num] = buffer;
-        len_array[buf_num] = malloc_len; 
+        malloc_len = len_array[buf_num] - search_info->match_len2;       
+        if(malloc_len > 0)
+        {
+            buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (
+                size + 1));
+            memcpy(buffer, buf_array[buf_num] + search_info->match_len2, malloc_len);        
+            axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num);
+            buf_array[buf_num] = buffer;
+            len_array[buf_num] = malloc_len; 
+        }
+        else
+        {
+            buf_array[buf_num] = NULL;
+            len_array[buf_num] = 0;
+        }
     }
     else
     {
@@ -316,9 +332,16 @@
     /*Resetting the previous search data and getting ready 
       for the next search */
 
+    if(!buf_array[buf_num])
+    {
+        part_start = buf_num + 1;
+    }
+    else
+    {
+        part_start = buf_num;
+    }
     pos = NULL;
     malloc_len = 0;
-    part_start = buf_num;   
  
     search_info->match_len1 = 0;
     search_info->match_len2 = 0;
@@ -348,15 +371,24 @@
             {
                 return NULL;
             }
+
             malloc_len = len_array[buf_num] - search_info->match_len1 - temp_mime_boundary_size;
-            buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (
-                size + 1));
-            memset(buffer, 0, size + 1);
-            memcpy(buffer, pos + temp_mime_boundary_size, malloc_len);
-            axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num);
-            buf_array[buf_num] = buffer;
-            len_array[buf_num] = malloc_len;
-            printf("Malloc_len after soap : %d \n", malloc_len);
+            if(malloc_len > 0)
+            {
+                buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (
+                    size + 1));
+                memset(buffer, 0, size + 1);
+                memcpy(buffer, pos + temp_mime_boundary_size, malloc_len);
+                axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num);
+                buf_array[buf_num] = buffer;
+                len_array[buf_num] = malloc_len;
+                printf("Malloc_len after soap : %d \n", malloc_len);
+            }
+            else
+            {
+                buf_array[buf_num] = NULL;
+                len_array[buf_num] = 0;
+            }
         }     
         else
         {
@@ -376,13 +408,23 @@
             {
                 return NULL;
             }
+
             malloc_len = len_array[buf_num] - search_info->match_len2;
-            buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (
-                size + 1));
-            memcpy(buffer, buf_array[buf_num] + search_info->match_len2, malloc_len);
-            axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num);
-            buf_array[buf_num] = buffer;
-            len_array[buf_num] = malloc_len;
+
+            if(malloc_len > 0)
+            {
+                buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (
+                    size + 1));
+                memcpy(buffer, buf_array[buf_num] + search_info->match_len2, malloc_len);
+                axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num);
+                buf_array[buf_num] = buffer;
+                len_array[buf_num] = malloc_len;
+            }
+            else
+            {
+                buf_array[buf_num] = NULL;
+                len_array[buf_num] = 0;
+            }
         }     
         else
         {
@@ -412,8 +454,16 @@
         search_info->match_len2 = 0;
         pos = NULL;
 
+        if(!buf_array[buf_num])
+        {
+            part_start = buf_num + 1;
+        }
+        else
+        {
+            part_start = buf_num;
+        }
+
         malloc_len = 0;
-        part_start = buf_num;
        
         printf("before crlf method %d\n", len_array[buf_num]);
  
@@ -446,12 +496,20 @@
                 }
                 printf("after calculate len method %d\n", len_array[buf_num]);
                 malloc_len = buf_array[buf_num] + len_array[buf_num] - pos - 4;
-                buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (
-                    size + 1));
-                memcpy(buffer, pos + 4, malloc_len);
-                axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num);
-                buf_array[buf_num] = buffer;
-                len_array[buf_num] = malloc_len;
+                if(malloc_len > 0)
+                {
+                    buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (
+                        size + 1));
+                    memcpy(buffer, pos + 4, malloc_len);
+                    axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num);
+                    buf_array[buf_num] = buffer;
+                    len_array[buf_num] = malloc_len;
+                }
+                else
+                {
+                    buf_array[buf_num] = NULL;
+                    len_array[buf_num] = 0;
+                }
             }     
             else
             {
@@ -471,13 +529,22 @@
                 {
                     return NULL;
                 }
+
                 malloc_len = len_array[buf_num] - search_info->match_len2;
-                buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (
-                    size + 1));
-                memcpy(buffer, buf_array[buf_num] + search_info->match_len2, malloc_len);
-                axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num);
-                buf_array[buf_num] = buffer;
-                len_array[buf_num] = malloc_len;
+                if(malloc_len > 0)
+                {
+                    buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (
+                        size + 1));
+                    memcpy(buffer, buf_array[buf_num] + search_info->match_len2, malloc_len);
+                    axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num);
+                    buf_array[buf_num] = buffer;
+                    len_array[buf_num] = malloc_len;
+                }
+                else
+                {
+                    buf_array[buf_num] = NULL;
+                    len_array[buf_num] = 0;
+                }
             }     
             else
             {
@@ -494,10 +561,18 @@
         search_info->match_len1 = 0;
         search_info->match_len2 = 0;
 
-        part_start = buf_num;
+        if(!buf_array[buf_num])
+        {
+            part_start = buf_num + 1;
+        }
+        else
+        {
+            part_start = buf_num;
+        }
+        
         malloc_len = 0;
 
-        /*We extract the mime headers. So lets searc for the attachment.*/
+        /*We extract the mime headers. So lets search for the attachment.*/
 
         pos = axiom_mime_parser_search_for_attachment(env, callback, callback_ctx, &buf_num,
           len_array, buf_array, search_info, size, temp_mime_boundary);
@@ -551,23 +626,43 @@
            
             if(search_info->match_len2 == 0)
             {
+                
                 malloc_len = len_array[buf_num] - search_info->match_len1 - temp_mime_boundary_size;
-                buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (
-                    size + 1));
-                memcpy(buffer, pos + temp_mime_boundary_size, malloc_len);
-                axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num);
-                buf_array[buf_num] = buffer;
-                len_array[buf_num] = malloc_len;
+
+                if(malloc_len > 0)
+                {
+                    buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (
+                        size + 1));
+                    memcpy(buffer, pos + temp_mime_boundary_size, malloc_len);
+                    axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num);
+                    buf_array[buf_num] = buffer;
+                    len_array[buf_num] = malloc_len;
+                }
+                else
+                {
+                    buf_array[buf_num] = NULL;
+                    len_array[buf_num] = 0;
+                }                
+
             }   
             else if(search_info->match_len2 > 0)
             {
                 malloc_len = len_array[buf_num] - search_info->match_len2;
-                buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (
-                    size + 1));
-                memcpy(buffer, buf_array[buf_num] + search_info->match_len2, malloc_len);
-                axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num);
-                buf_array[buf_num] = buffer;
-                len_array[buf_num] = malloc_len;
+
+                if(malloc_len > 0)
+                {
+                    buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (
+                        size + 1));
+                    memcpy(buffer, buf_array[buf_num] + search_info->match_len2, malloc_len);
+                    axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num);
+                    buf_array[buf_num] = buffer;
+                    len_array[buf_num] = malloc_len;
+                }
+                else
+                {
+                    buf_array[buf_num] = NULL;
+                    len_array[buf_num] = 0;
+                }
             }              
         }
         else
@@ -582,8 +677,11 @@
 
         /*Check wether we encounter --MIMEBOUNDARY-- to find the end of mime*/
 
-        end_of_mime = (AXIOM_MIME_BOUNDARY_BYTE == *(buf_array[buf_num])) &&
-                        (AXIOM_MIME_BOUNDARY_BYTE == *(buf_array[buf_num] + 1));
+        if(buf_array[buf_num])
+        {
+            end_of_mime = (AXIOM_MIME_BOUNDARY_BYTE == *(buf_array[buf_num])) &&
+                            (AXIOM_MIME_BOUNDARY_BYTE == *(buf_array[buf_num] + 1));
+        }
 
         if(mime_headers)
         {
@@ -653,9 +751,28 @@
 
     /*First do a search in the first buffer*/
 
-    search_info->buffer1 = buf_array[*buf_num];
-    search_info->len1 = len_array[*buf_num];
-    found = axiom_mime_parser_search_string(search_info, env);
+    if(buf_array[*buf_num])
+    {
+        search_info->buffer1 = buf_array[*buf_num];
+        search_info->len1 = len_array[*buf_num];
+        found = axiom_mime_parser_search_string(search_info, env);
+    }
+    else
+    {
+        *buf_num = *buf_num + 1;
+        buf_array[*buf_num] = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (size + 1));
+        if(buf_array[*buf_num])
+        {
+            len = callback(buf_array[*buf_num], size, (void *) callback_ctx);
+        }
+        if(len > 0)
+        {
+            len_array[*buf_num] = len;
+            search_info->buffer1 = buf_array[*buf_num];
+            search_info->len1 = len_array[*buf_num];
+            found = axiom_mime_parser_search_string(search_info, env);
+        }    
+    }
 
     while(!found)
     {
@@ -719,9 +836,28 @@
     search_info->match_len2 = 0;
     search_info->primary_search = AXIS2_FALSE;
 
-    search_info->buffer1 = buf_array[*buf_num];
-    search_info->len1 = len_array[*buf_num];
-    found = axiom_mime_parser_search_string(search_info, env);
+    if(buf_array[*buf_num])
+    {
+        search_info->buffer1 = buf_array[*buf_num];
+        search_info->len1 = len_array[*buf_num];
+        found = axiom_mime_parser_search_string(search_info, env);
+    }
+    else
+    {
+        *buf_num = *buf_num + 1;
+        buf_array[*buf_num] = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (size + 1));
+        if(buf_array[*buf_num])
+        {
+            len = callback(buf_array[*buf_num], size, (void *) callback_ctx);
+        }
+        if(len > 0)
+        {
+            len_array[*buf_num] = len;
+            search_info->buffer1 = buf_array[*buf_num];
+            search_info->len1 = len_array[*buf_num];
+            found = axiom_mime_parser_search_string(search_info, env);
+        }
+    }
 
     while(!found)
     {
@@ -775,7 +911,6 @@
 {
     axis2_char_t *found = NULL;
     int len = 0;   
-    int binary_start = 0;
     axis2_status_t status = AXIS2_FAILURE;
     axis2_char_t *temp = NULL;    
     int temp_length = 0;
@@ -791,11 +926,28 @@
     search_info->cached = AXIS2_FALSE;
     search_info->handler = NULL;
 
-    binary_start = *buf_num;
-
-    search_info->buffer1 = buf_array[*buf_num];
-    search_info->len1 = len_array[*buf_num];
-    found = axiom_mime_parser_search_string(search_info, env);
+    if(buf_array[*buf_num])
+    {
+        search_info->buffer1 = buf_array[*buf_num];
+        search_info->len1 = len_array[*buf_num];
+        found = axiom_mime_parser_search_string(search_info, env);
+    }
+    else
+    {
+        *buf_num = *buf_num + 1;
+        buf_array[*buf_num] = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (size + 1));
+        if(buf_array[*buf_num])
+        {
+            len = callback(buf_array[*buf_num], size, (void *) callback_ctx);
+        }
+        if(len > 0)
+        {
+            len_array[*buf_num] = len;
+            search_info->buffer1 = buf_array[*buf_num];
+            search_info->len1 = len_array[*buf_num];
+            found = axiom_mime_parser_search_string(search_info, env);
+        }
+    }
 
     while(!found)
     {