]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
Ensure failure when no base64 data have been read. Suggested by Ramkumar Chinchani.
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Thu, 6 Mar 2014 18:22:29 +0000 (19:22 +0100)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Thu, 6 Mar 2014 18:22:29 +0000 (19:22 +0100)
lib/openpgp/extras.c

index 65bb4881727c6db7d8cb5c6c7921f68db6e41d9c..484406ae7f29a22992aaf6ef4cc4ba9048aac853 100644 (file)
@@ -139,7 +139,7 @@ gnutls_openpgp_keyring_import(gnutls_openpgp_keyring_t keyring,
         * not thread safe.
         */
        if (format == GNUTLS_OPENPGP_FMT_BASE64) {
-               size_t written = 0;
+               size_t seen = 0;
 
                err =
                    cdk_stream_tmp_from_mem(data->data, data->size,
@@ -168,15 +168,20 @@ gnutls_openpgp_keyring_import(gnutls_openpgp_keyring_t keyring,
 
                do {
                        err =
-                           cdk_stream_read(input, raw_data + written,
-                                           raw_len - written);
+                           cdk_stream_read(input, raw_data + seen,
+                                           raw_len - seen);
 
                        if (err > 0)
-                               written += err;
+                               seen += err;
                }
-               while (written < raw_len && err != EOF && err > 0);
+               while (seen < raw_len && err != EOF && err > 0);
 
-               raw_len = written;
+               raw_len = seen;
+               if (raw_len == 0) {
+                       gnutls_assert();
+                       err = GNUTLS_E_BASE64_DECODING_ERROR;
+                       goto error;
+               }
        } else {                /* RAW */
                raw_len = data->size;
                raw_data = data->data;