X-Git-Url: https://the.earth.li/gitweb/?a=blobdiff_plain;f=decodekey.c;h=fc3844aeefaf26c949011ba0b65eccb82b283795;hb=0c120d1895d25b59abe338862189be1b87447569;hp=522ad901383dd6a217b0ef5ed2320a93e3d51f8b;hpb=ec38d8bd7e8a66645e75e3d6c8b9dadb5dd85ec7;p=onak.git diff --git a/decodekey.c b/decodekey.c index 522ad90..fc3844a 100644 --- a/decodekey.c +++ b/decodekey.c @@ -17,7 +17,7 @@ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -#include +#include #include #include #include @@ -28,7 +28,6 @@ #include "keyid.h" #include "keystructs.h" #include "ll.h" -#include "log.h" #include "openpgp.h" /* @@ -51,7 +50,7 @@ onak_status_t parse_subpackets(unsigned char *data, size_t len, int length = 0; int packetlen = 0; - log_assert(data != NULL); + assert(data != NULL); /* Make sure we actually have the 2 byte length field */ if (len < 2) { @@ -82,6 +81,10 @@ onak_status_t parse_subpackets(unsigned char *data, size_t len, packetlen <<= 8; packetlen |= data[offset++]; } + /* Check the supplied length is within the remaining data */ + if (packetlen == 0 || (packetlen + offset) > length) { + return ONAK_E_INVALID_PKT; + } switch (data[offset] & 0x7F) { case OPENPGP_SIGSUB_CREATION: /* @@ -158,11 +161,8 @@ onak_status_t parse_subpackets(unsigned char *data, size_t len, * 7 is set in which case we log a major error. */ if (data[offset] & 0x80) { - logthing(LOGTHING_CRITICAL, - "Critical subpacket type not parsed: 0x%X", - data[offset]); + return ONAK_E_UNSUPPORTED_FEATURE; } - } offset += packetlen; }