]> git.sommitrealweird.co.uk Git - onak.git/blobdiff - parsekey.c
Add assert for invalid armor parameters.
[onak.git] / parsekey.c
index 83fca29f9ce19902756c34fb59895c95b6542ecd..687fd9bd8612c6f9a3cd2c41af96e9269368a620 100644 (file)
@@ -4,11 +4,8 @@
  * Jonathan McDowell <noodles@earth.li>
  *
  * Copyright 2002 Project Purple
  * Jonathan McDowell <noodles@earth.li>
  *
  * Copyright 2002 Project Purple
- *
- * $Id: parsekey.c,v 1.16 2003/10/04 10:21:40 noodles Exp $
  */
 
  */
 
-#include <assert.h>
 #include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -54,7 +51,7 @@ int parse_keys(struct openpgp_packet_list *packets,
                         * key (it should be a revocation), to the current UID
                         * or the current subkey.
                         */
                         * key (it should be a revocation), to the current UID
                         * or the current subkey.
                         */
-                       assert(curkey != NULL);
+                       log_assert(curkey != NULL);
                        if (curkey->subkeys != NULL) {
                                ADD_PACKET_TO_LIST_END(curkey->last_subkey,
                                        sig,
                        if (curkey->subkeys != NULL) {
                                ADD_PACKET_TO_LIST_END(curkey->last_subkey,
                                        sig,
@@ -90,8 +87,8 @@ int parse_keys(struct openpgp_packet_list *packets,
                        /*
                         * It's a UID packet (or a photo id, which is similar).
                         */
                        /*
                         * It's a UID packet (or a photo id, which is similar).
                         */
-                       assert(curkey != NULL);
-                       assert(curkey->subkeys == NULL);
+                       log_assert(curkey != NULL);
+                       log_assert(curkey->subkeys == NULL);
                        ADD_PACKET_TO_LIST_END(curkey,
                                uid,
                                packet_dup(packets->packet));
                        ADD_PACKET_TO_LIST_END(curkey,
                                uid,
                                packet_dup(packets->packet));
@@ -100,7 +97,7 @@ int parse_keys(struct openpgp_packet_list *packets,
                        /*
                         * It's a subkey packet.
                         */
                        /*
                         * It's a subkey packet.
                         */
-                       assert(curkey != NULL);
+                       log_assert(curkey != NULL);
                        ADD_PACKET_TO_LIST_END(curkey,
                                subkey,
                                packet_dup(packets->packet));
                        ADD_PACKET_TO_LIST_END(curkey,
                                subkey,
                                packet_dup(packets->packet));
@@ -135,7 +132,7 @@ int parse_keys(struct openpgp_packet_list *packets,
  */
 int debug_packet(struct openpgp_packet *packet)
 {
  */
 int debug_packet(struct openpgp_packet *packet)
 {
-       printf("\tNew format: %d, Tag: %d, Length: %d\n",
+       printf("\tNew format: %d, Tag: %u, Length: %d\n",
                        packet->newformat,
                        packet->tag,
                        packet->length);
                        packet->newformat,
                        packet->tag,
                        packet->length);
@@ -166,7 +163,7 @@ int read_openpgp_stream(int (*getchar_func)(void *ctx, size_t count,
        int                              keys = 0;
        bool                             inpacket = false;
 
        int                              keys = 0;
        bool                             inpacket = false;
 
-       assert(packets != NULL);
+       log_assert(packets != NULL);
        curpacket = *packets;
        if (curpacket != NULL) {
                while (curpacket->next != NULL) {
        curpacket = *packets;
        if (curpacket != NULL) {
                while (curpacket->next != NULL) {
@@ -225,13 +222,13 @@ int read_openpgp_stream(int (*getchar_func)(void *ctx, size_t count,
                                        curpacket->packet->length = curchar;
                                        curpacket->packet->length <<= 8;
                                        rc = getchar_func(ctx, 1, &curchar);
                                        curpacket->packet->length = curchar;
                                        curpacket->packet->length <<= 8;
                                        rc = getchar_func(ctx, 1, &curchar);
-                                       curpacket->packet->length = curchar;
+                                       curpacket->packet->length += curchar;
                                        curpacket->packet->length <<= 8;
                                        rc = getchar_func(ctx, 1, &curchar);
                                        curpacket->packet->length <<= 8;
                                        rc = getchar_func(ctx, 1, &curchar);
-                                       curpacket->packet->length = curchar;
+                                       curpacket->packet->length += curchar;
                                        curpacket->packet->length <<= 8;
                                        rc = getchar_func(ctx, 1, &curchar);
                                        curpacket->packet->length <<= 8;
                                        rc = getchar_func(ctx, 1, &curchar);
-                                       curpacket->packet->length = curchar;
+                                       curpacket->packet->length += curchar;
                                }
                        } else {
                                curpacket->packet->tag = (curchar & 0x3C) >> 2;
                                }
                        } else {
                                curpacket->packet->tag = (curchar & 0x3C) >> 2;
@@ -292,6 +289,7 @@ int read_openpgp_stream(int (*getchar_func)(void *ctx, size_t count,
                } else {
                        logthing(LOGTHING_ERROR, "Unexpected character: 0x%X",
                                curchar);
                } else {
                        logthing(LOGTHING_ERROR, "Unexpected character: 0x%X",
                                curchar);
+                       rc = 1;
                }
        }
 
                }
        }
 
@@ -333,6 +331,28 @@ int write_openpgp_stream(int (*putchar_func)(void *ctx, size_t count,
                                curchar = (packets->packet->length - 192) &
                                         0xFF;
                                putchar_func(ctx, 1, &curchar);
                                curchar = (packets->packet->length - 192) &
                                         0xFF;
                                putchar_func(ctx, 1, &curchar);
+                       } else if (packets->packet->length > 8382 &&
+                               packets->packet->length < 0xFFFFFFFF) {
+                               logthing(LOGTHING_DEBUG,
+                                       "Writing 5 byte length");
+                               curchar = 255;
+                               putchar_func(ctx, 1, &curchar);
+                               
+                               curchar = (packets->packet->length >> 24);
+                               curchar &= 0xFF;
+                               putchar_func(ctx, 1, &curchar);
+                               
+                               curchar = (packets->packet->length >> 16);
+                               curchar &= 0xFF;
+                               putchar_func(ctx, 1, &curchar);
+                               
+                               curchar = (packets->packet->length >> 8);
+                               curchar &= 0xFF;
+                               putchar_func(ctx, 1, &curchar);
+                               
+                               curchar = packets->packet->length;
+                               curchar &= 0xFF;
+                               putchar_func(ctx, 1, &curchar);
                        } else {
                                logthing(LOGTHING_ERROR,
                                        "Unsupported new format length.");
                        } else {
                                logthing(LOGTHING_ERROR,
                                        "Unsupported new format length.");