]> err.no Git - yubikey-server-c/commitdiff
Error handling in split_otp
authorTollef Fog Heen <tfheen@err.no>
Mon, 12 Oct 2009 06:44:46 +0000 (08:44 +0200)
committerTollef Fog Heen <tfheen@err.no>
Mon, 12 Oct 2009 06:44:46 +0000 (08:44 +0200)
src/main.c

index 6c5b996fa1390693dd8e7e0084479f30c7cee12e..83bb0ab1d61342b1ce83963ea1cba14b0b31f53c 100644 (file)
@@ -190,6 +190,7 @@ free_mem:
 static int split_otp(const char *otp, char **user, char **s_otp)
 {
        size_t otp_len, i, j;
+       int r;
        /* Modhex doubles the length of the string, so grab the last
         * YUBIKEY_BLOCK_SIZE * 2 octets to get the actual OTP */
        otp_len = strlen(otp);
@@ -197,16 +198,23 @@ static int split_otp(const char *otp, char **user, char **s_otp)
        assert(otp_len > YUBIKEY_BLOCK_SIZE * 2);
        assert(yubikey_modhex_p(otp));
 
-       /* XXX error checking */
        i = otp_len - YUBIKEY_BLOCK_SIZE * 2;
        *user = malloc(i+1);
+       if (*user == NULL) {
+               return -1;
+       }
        memcpy(*user, otp, i);
        (*user)[i] = '\0';
 
        j = YUBIKEY_BLOCK_SIZE * 2;
        *s_otp = malloc(j+1);
+       if (*s_otp == NULL) {
+               free(*user);
+               return -1;
+       }
        memcpy(*s_otp, otp + i, j);
        (*s_otp)[j] = '\0';
+
        return 0;
 }