]> code.delx.au - gnu-emacs/commitdiff
(Fbase64_decode_region, Fbase64_decode_string):
authorKarl Heuer <kwzh@gnu.org>
Wed, 16 Dec 1998 06:32:39 +0000 (06:32 +0000)
committerKarl Heuer <kwzh@gnu.org>
Wed, 16 Dec 1998 06:32:39 +0000 (06:32 +0000)
Do free malloc'd memory even in case of failure.
Use xfree, not free.
(Fbase64_encode_region, Fbase64_encode_string):
Use xfree, not free.
(base64_decode_1): Don't fail for short lines.

src/fns.c

index e406ce3ecfdb678dfa2ef5c5da4988fc4293185a..76455feb10efbb0745b75955c99b0d7804d41338 100644 (file)
--- a/src/fns.c
+++ b/src/fns.c
@@ -2859,7 +2859,7 @@ into shorter lines.")
   SET_PT_BOTH (XFASTINT (beg), ibeg);
   insert (encoded, encoded_length);
   if (allength > MAX_ALLOCA)
-    free (encoded);
+    xfree (encoded);
   del_range_byte (ibeg + encoded_length, iend + encoded_length, 1);
 
   /* If point was outside of the region, restore it exactly; else just
@@ -2902,7 +2902,7 @@ DEFUN ("base64-encode-string", Fbase64_encode_string, Sbase64_encode_string,
 
   encoded_string = make_unibyte_string (encoded, encoded_length);
   if (allength > MAX_ALLOCA)
-    free (encoded);
+    xfree (encoded);
 
   return encoded_string;
 }
@@ -3013,8 +3013,12 @@ If the region can't be decoded, return nil and don't modify the buffer.")
     abort ();
 
   if (decoded_length < 0)
-    /* The decoding wasn't possible. */
-    return Qnil;
+    {
+      /* The decoding wasn't possible. */
+      if (length > MAX_ALLOCA)
+       xfree (decoded);
+      return Qnil;
+    }
 
   /* Now we have decoded the region, so we insert the new contents
      and delete the old.  (Insert first in order to preserve markers.)  */
@@ -3027,7 +3031,7 @@ If the region can't be decoded, return nil and don't modify the buffer.")
   insert (decoded, decoded_length);
   inserted_chars = PT - (XFASTINT (beg) + 1);
   if (length > MAX_ALLOCA)
-    free (decoded);
+    xfree (decoded);
   /* At first delete the original text.  This never cause byte
      combining.  */
   del_range_both (PT + 1, PT_BYTE + 1, XFASTINT (end) + inserted_chars + 2,
@@ -3073,11 +3077,13 @@ DEFUN ("base64-decode-string", Fbase64_decode_string, Sbase64_decode_string,
     abort ();
 
   if (decoded_length < 0)
-      return Qnil;
+    /* The decoding wasn't possible. */
+    decoded_string = Qnil;
+  else
+    decoded_string = make_string (decoded, decoded_length);
 
-  decoded_string = make_string (decoded, decoded_length);
   if (length > MAX_ALLOCA)
-    free (decoded);
+    xfree (decoded);
 
   return decoded_string;
 }
@@ -3105,8 +3111,6 @@ base64_decode_1 (from, to, length)
          c = from[i++];
          if (i == length)
            break;
-         if (counter != MIME_LINE_LENGTH / 4)
-           return -1;
          counter = 1;
        }
       else