diff options
author | jsing <> | 2014-07-13 21:35:27 +0000 |
---|---|---|
committer | jsing <> | 2014-07-13 21:35:27 +0000 |
commit | 24e41266dcff4261425b554ed5b08cb4be1afe9e (patch) | |
tree | 377ab0cd8b226205d76bf86aee170144bae236e3 /src | |
parent | 1a63ea429052f7be2aecd7de5b535dea76815cf9 (diff) | |
download | openbsd-24e41266dcff4261425b554ed5b08cb4be1afe9e.tar.gz openbsd-24e41266dcff4261425b554ed5b08cb4be1afe9e.tar.bz2 openbsd-24e41266dcff4261425b554ed5b08cb4be1afe9e.zip |
Convert error handling to SSLerr and ERR_asprintf_error_data.
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libssl/src/ssl/ssl_asn1.c | 113 | ||||
-rw-r--r-- | src/lib/libssl/ssl_asn1.c | 113 |
2 files changed, 108 insertions, 118 deletions
diff --git a/src/lib/libssl/src/ssl/ssl_asn1.c b/src/lib/libssl/src/ssl/ssl_asn1.c index 90071000de..9e1e2e37a1 100644 --- a/src/lib/libssl/src/ssl/ssl_asn1.c +++ b/src/lib/libssl/src/ssl/ssl_asn1.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_asn1.c,v 1.34 2014/07/13 17:56:56 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_asn1.c,v 1.35 2014/07/13 21:35:27 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -274,11 +274,10 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
274 | c.p = *pp; | 274 | c.p = *pp; |
275 | c.q = *pp; | 275 | c.q = *pp; |
276 | c.max = (length == 0) ? 0 : (c.p + length); | 276 | c.max = (length == 0) ? 0 : (c.p + length); |
277 | c.error = ERR_R_NESTED_ASN1_ERROR; | ||
278 | 277 | ||
279 | if (a == NULL || *a == NULL) { | 278 | if (a == NULL || *a == NULL) { |
280 | if ((ret = SSL_SESSION_new()) == NULL) { | 279 | if ((ret = SSL_SESSION_new()) == NULL) { |
281 | c.line = __LINE__; | 280 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
282 | goto err; | 281 | goto err; |
283 | } | 282 | } |
284 | } else | 283 | } else |
@@ -288,7 +287,7 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
288 | osp = &os; | 287 | osp = &os; |
289 | 288 | ||
290 | if (!asn1_GetSequence(&c, &length)) { | 289 | if (!asn1_GetSequence(&c, &length)) { |
291 | c.line = __LINE__; | 290 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
292 | goto err; | 291 | goto err; |
293 | } | 292 | } |
294 | 293 | ||
@@ -296,7 +295,7 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
296 | ai.length = 0; | 295 | ai.length = 0; |
297 | c.q = c.p; | 296 | c.q = c.p; |
298 | if (d2i_ASN1_INTEGER(&aip, &c.p, c.slen) == NULL) { | 297 | if (d2i_ASN1_INTEGER(&aip, &c.p, c.slen) == NULL) { |
299 | c.line = __LINE__; | 298 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
300 | goto err; | 299 | goto err; |
301 | } | 300 | } |
302 | c.slen -= (c.p - c.q); | 301 | c.slen -= (c.p - c.q); |
@@ -310,7 +309,7 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
310 | /* we don't care about the version right now :-) */ | 309 | /* we don't care about the version right now :-) */ |
311 | c.q = c.p; | 310 | c.q = c.p; |
312 | if (d2i_ASN1_INTEGER(&aip, &c.p, c.slen) == NULL) { | 311 | if (d2i_ASN1_INTEGER(&aip, &c.p, c.slen) == NULL) { |
313 | c.line = __LINE__; | 312 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
314 | goto err; | 313 | goto err; |
315 | } | 314 | } |
316 | c.slen -= (c.p - c.q); | 315 | c.slen -= (c.p - c.q); |
@@ -326,21 +325,20 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
326 | os.length = 0; | 325 | os.length = 0; |
327 | c.q = c.p; | 326 | c.q = c.p; |
328 | if (d2i_ASN1_OCTET_STRING(&osp, &c.p, c.slen) == NULL) { | 327 | if (d2i_ASN1_OCTET_STRING(&osp, &c.p, c.slen) == NULL) { |
329 | c.line = __LINE__; | 328 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
330 | goto err; | 329 | goto err; |
331 | } | 330 | } |
332 | c.slen -= (c.p - c.q); | 331 | c.slen -= (c.p - c.q); |
333 | if ((ssl_version >> 8) >= SSL3_VERSION_MAJOR) { | 332 | if ((ssl_version >> 8) >= SSL3_VERSION_MAJOR) { |
334 | if (os.length != 2) { | 333 | if (os.length != 2) { |
335 | c.error = SSL_R_CIPHER_CODE_WRONG_LENGTH; | 334 | SSLerr(SSL_F_D2I_SSL_SESSION, |
336 | c.line = __LINE__; | 335 | SSL_R_CIPHER_CODE_WRONG_LENGTH); |
337 | goto err; | 336 | goto err; |
338 | } | 337 | } |
339 | id = 0x03000000L | ((unsigned long)os.data[0]<<8L) | | 338 | id = 0x03000000L | ((unsigned long)os.data[0]<<8L) | |
340 | (unsigned long)os.data[1]; | 339 | (unsigned long)os.data[1]; |
341 | } else { | 340 | } else { |
342 | c.error = SSL_R_UNKNOWN_SSL_VERSION; | 341 | SSLerr(SSL_F_D2I_SSL_SESSION, SSL_R_UNKNOWN_SSL_VERSION); |
343 | c.line = __LINE__; | ||
344 | goto err; | 342 | goto err; |
345 | } | 343 | } |
346 | 344 | ||
@@ -349,7 +347,7 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
349 | 347 | ||
350 | c.q = c.p; | 348 | c.q = c.p; |
351 | if (d2i_ASN1_OCTET_STRING(&osp, &c.p, c.slen) == NULL) { | 349 | if (d2i_ASN1_OCTET_STRING(&osp, &c.p, c.slen) == NULL) { |
352 | c.line = __LINE__; | 350 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
353 | goto err; | 351 | goto err; |
354 | } | 352 | } |
355 | c.slen -= (c.p - c.q); | 353 | c.slen -= (c.p - c.q); |
@@ -366,7 +364,7 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
366 | 364 | ||
367 | c.q = c.p; | 365 | c.q = c.p; |
368 | if (d2i_ASN1_OCTET_STRING(&osp, &c.p, c.slen) == NULL) { | 366 | if (d2i_ASN1_OCTET_STRING(&osp, &c.p, c.slen) == NULL) { |
369 | c.line = __LINE__; | 367 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
370 | goto err; | 368 | goto err; |
371 | } | 369 | } |
372 | c.slen -= (c.p - c.q); | 370 | c.slen -= (c.p - c.q); |
@@ -386,21 +384,21 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
386 | c.q = c.p; | 384 | c.q = c.p; |
387 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); | 385 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); |
388 | if (Tinf & 0x80) { | 386 | if (Tinf & 0x80) { |
389 | c.error = ERR_R_BAD_ASN1_OBJECT_HEADER; | 387 | SSLerr(SSL_F_D2I_SSL_SESSION, |
390 | c.line = __LINE__; | 388 | ERR_R_BAD_ASN1_OBJECT_HEADER); |
391 | goto err; | 389 | goto err; |
392 | } | 390 | } |
393 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) | 391 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) |
394 | Tlen = c.slen - (c.p - c.q) - 2; | 392 | Tlen = c.slen - (c.p - c.q) - 2; |
395 | if (d2i_ASN1_INTEGER(&aip, &c.p, Tlen) == NULL) { | 393 | if (d2i_ASN1_INTEGER(&aip, &c.p, Tlen) == NULL) { |
396 | c.line = __LINE__; | 394 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
397 | goto err; | 395 | goto err; |
398 | } | 396 | } |
399 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { | 397 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { |
400 | Tlen = c.slen - (c.p - c.q); | 398 | Tlen = c.slen - (c.p - c.q); |
401 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { | 399 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { |
402 | c.error = ERR_R_MISSING_ASN1_EOS; | 400 | SSLerr(SSL_F_D2I_SSL_SESSION, |
403 | c.line = __LINE__; | 401 | ERR_R_MISSING_ASN1_EOS); |
404 | goto err; | 402 | goto err; |
405 | } | 403 | } |
406 | } | 404 | } |
@@ -421,21 +419,21 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
421 | c.q = c.p; | 419 | c.q = c.p; |
422 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); | 420 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); |
423 | if (Tinf & 0x80) { | 421 | if (Tinf & 0x80) { |
424 | c.error = ERR_R_BAD_ASN1_OBJECT_HEADER; | 422 | SSLerr(SSL_F_D2I_SSL_SESSION, |
425 | c.line = __LINE__; | 423 | ERR_R_BAD_ASN1_OBJECT_HEADER); |
426 | goto err; | 424 | goto err; |
427 | } | 425 | } |
428 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) | 426 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) |
429 | Tlen = c.slen - (c.p - c.q) - 2; | 427 | Tlen = c.slen - (c.p - c.q) - 2; |
430 | if (d2i_ASN1_INTEGER(&aip, &c.p, Tlen) == NULL) { | 428 | if (d2i_ASN1_INTEGER(&aip, &c.p, Tlen) == NULL) { |
431 | c.line = __LINE__; | 429 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
432 | goto err; | 430 | goto err; |
433 | } | 431 | } |
434 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { | 432 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { |
435 | Tlen = c.slen - (c.p - c.q); | 433 | Tlen = c.slen - (c.p - c.q); |
436 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { | 434 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { |
437 | c.error = ERR_R_MISSING_ASN1_EOS; | 435 | SSLerr(SSL_F_D2I_SSL_SESSION, |
438 | c.line = __LINE__; | 436 | ERR_R_MISSING_ASN1_EOS); |
439 | goto err; | 437 | goto err; |
440 | } | 438 | } |
441 | } | 439 | } |
@@ -459,21 +457,21 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
459 | c.q = c.p; | 457 | c.q = c.p; |
460 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); | 458 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); |
461 | if (Tinf & 0x80) { | 459 | if (Tinf & 0x80) { |
462 | c.error = ERR_R_BAD_ASN1_OBJECT_HEADER; | 460 | SSLerr(SSL_F_D2I_SSL_SESSION, |
463 | c.line = __LINE__; | 461 | ERR_R_BAD_ASN1_OBJECT_HEADER); |
464 | goto err; | 462 | goto err; |
465 | } | 463 | } |
466 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) | 464 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) |
467 | Tlen = c.slen - (c.p - c.q) - 2; | 465 | Tlen = c.slen - (c.p - c.q) - 2; |
468 | if (d2i_X509(&ret->peer, &c.p, Tlen) == NULL) { | 466 | if (d2i_X509(&ret->peer, &c.p, Tlen) == NULL) { |
469 | c.line = __LINE__; | 467 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
470 | goto err; | 468 | goto err; |
471 | } | 469 | } |
472 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { | 470 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { |
473 | Tlen = c.slen - (c.p - c.q); | 471 | Tlen = c.slen - (c.p - c.q); |
474 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { | 472 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { |
475 | c.error = ERR_R_MISSING_ASN1_EOS; | 473 | SSLerr(SSL_F_D2I_SSL_SESSION, |
476 | c.line = __LINE__; | 474 | ERR_R_MISSING_ASN1_EOS); |
477 | goto err; | 475 | goto err; |
478 | } | 476 | } |
479 | } | 477 | } |
@@ -488,21 +486,21 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
488 | c.q = c.p; | 486 | c.q = c.p; |
489 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); | 487 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); |
490 | if (Tinf & 0x80) { | 488 | if (Tinf & 0x80) { |
491 | c.error = ERR_R_BAD_ASN1_OBJECT_HEADER; | 489 | SSLerr(SSL_F_D2I_SSL_SESSION, |
492 | c.line = __LINE__; | 490 | ERR_R_BAD_ASN1_OBJECT_HEADER); |
493 | goto err; | 491 | goto err; |
494 | } | 492 | } |
495 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) | 493 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) |
496 | Tlen = c.slen - (c.p - c.q) - 2; | 494 | Tlen = c.slen - (c.p - c.q) - 2; |
497 | if (d2i_ASN1_OCTET_STRING(&osp, &c.p, Tlen) == NULL) { | 495 | if (d2i_ASN1_OCTET_STRING(&osp, &c.p, Tlen) == NULL) { |
498 | c.line = __LINE__; | 496 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
499 | goto err; | 497 | goto err; |
500 | } | 498 | } |
501 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { | 499 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { |
502 | Tlen = c.slen - (c.p - c.q); | 500 | Tlen = c.slen - (c.p - c.q); |
503 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { | 501 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { |
504 | c.error = ERR_R_MISSING_ASN1_EOS; | 502 | SSLerr(SSL_F_D2I_SSL_SESSION, |
505 | c.line = __LINE__; | 503 | ERR_R_MISSING_ASN1_EOS); |
506 | goto err; | 504 | goto err; |
507 | } | 505 | } |
508 | } | 506 | } |
@@ -510,8 +508,7 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
510 | } | 508 | } |
511 | if (os.data != NULL) { | 509 | if (os.data != NULL) { |
512 | if (os.length > SSL_MAX_SID_CTX_LENGTH) { | 510 | if (os.length > SSL_MAX_SID_CTX_LENGTH) { |
513 | c.error = SSL_R_BAD_LENGTH; | 511 | SSLerr(SSL_F_D2I_SSL_SESSION, SSL_R_BAD_LENGTH); |
514 | c.line = __LINE__; | ||
515 | goto err; | 512 | goto err; |
516 | } else { | 513 | } else { |
517 | ret->sid_ctx_length = os.length; | 514 | ret->sid_ctx_length = os.length; |
@@ -530,21 +527,21 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
530 | c.q = c.p; | 527 | c.q = c.p; |
531 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); | 528 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); |
532 | if (Tinf & 0x80) { | 529 | if (Tinf & 0x80) { |
533 | c.error = ERR_R_BAD_ASN1_OBJECT_HEADER; | 530 | SSLerr(SSL_F_D2I_SSL_SESSION, |
534 | c.line = __LINE__; | 531 | ERR_R_BAD_ASN1_OBJECT_HEADER); |
535 | goto err; | 532 | goto err; |
536 | } | 533 | } |
537 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) | 534 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) |
538 | Tlen = c.slen - (c.p - c.q) - 2; | 535 | Tlen = c.slen - (c.p - c.q) - 2; |
539 | if (d2i_ASN1_INTEGER(&aip, &c.p, Tlen) == NULL) { | 536 | if (d2i_ASN1_INTEGER(&aip, &c.p, Tlen) == NULL) { |
540 | c.line = __LINE__; | 537 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
541 | goto err; | 538 | goto err; |
542 | } | 539 | } |
543 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { | 540 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { |
544 | Tlen = c.slen - (c.p - c.q); | 541 | Tlen = c.slen - (c.p - c.q); |
545 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { | 542 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { |
546 | c.error = ERR_R_MISSING_ASN1_EOS; | 543 | SSLerr(SSL_F_D2I_SSL_SESSION, |
547 | c.line = __LINE__; | 544 | ERR_R_MISSING_ASN1_EOS); |
548 | goto err; | 545 | goto err; |
549 | } | 546 | } |
550 | } | 547 | } |
@@ -566,21 +563,21 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
566 | c.q = c.p; | 563 | c.q = c.p; |
567 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); | 564 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); |
568 | if (Tinf & 0x80) { | 565 | if (Tinf & 0x80) { |
569 | c.error = ERR_R_BAD_ASN1_OBJECT_HEADER; | 566 | SSLerr(SSL_F_D2I_SSL_SESSION, |
570 | c.line = __LINE__; | 567 | ERR_R_BAD_ASN1_OBJECT_HEADER); |
571 | goto err; | 568 | goto err; |
572 | } | 569 | } |
573 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) | 570 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) |
574 | Tlen = c.slen - (c.p - c.q) - 2; | 571 | Tlen = c.slen - (c.p - c.q) - 2; |
575 | if (d2i_ASN1_OCTET_STRING(&osp, &c.p, Tlen) == NULL) { | 572 | if (d2i_ASN1_OCTET_STRING(&osp, &c.p, Tlen) == NULL) { |
576 | c.line = __LINE__; | 573 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
577 | goto err; | 574 | goto err; |
578 | } | 575 | } |
579 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { | 576 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { |
580 | Tlen = c.slen - (c.p - c.q); | 577 | Tlen = c.slen - (c.p - c.q); |
581 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { | 578 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { |
582 | c.error = ERR_R_MISSING_ASN1_EOS; | 579 | SSLerr(SSL_F_D2I_SSL_SESSION, |
583 | c.line = __LINE__; | 580 | ERR_R_MISSING_ASN1_EOS); |
584 | goto err; | 581 | goto err; |
585 | } | 582 | } |
586 | } | 583 | } |
@@ -604,21 +601,21 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
604 | c.q = c.p; | 601 | c.q = c.p; |
605 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); | 602 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); |
606 | if (Tinf & 0x80) { | 603 | if (Tinf & 0x80) { |
607 | c.error = ERR_R_BAD_ASN1_OBJECT_HEADER; | 604 | SSLerr(SSL_F_D2I_SSL_SESSION, |
608 | c.line = __LINE__; | 605 | ERR_R_BAD_ASN1_OBJECT_HEADER); |
609 | goto err; | 606 | goto err; |
610 | } | 607 | } |
611 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) | 608 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) |
612 | Tlen = c.slen - (c.p - c.q) - 2; | 609 | Tlen = c.slen - (c.p - c.q) - 2; |
613 | if (d2i_ASN1_INTEGER(&aip, &c.p, Tlen) == NULL) { | 610 | if (d2i_ASN1_INTEGER(&aip, &c.p, Tlen) == NULL) { |
614 | c.line = __LINE__; | 611 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
615 | goto err; | 612 | goto err; |
616 | } | 613 | } |
617 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { | 614 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { |
618 | Tlen = c.slen - (c.p - c.q); | 615 | Tlen = c.slen - (c.p - c.q); |
619 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { | 616 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { |
620 | c.error = ERR_R_MISSING_ASN1_EOS; | 617 | SSLerr(SSL_F_D2I_SSL_SESSION, |
621 | c.line = __LINE__; | 618 | ERR_R_MISSING_ASN1_EOS); |
622 | goto err; | 619 | goto err; |
623 | } | 620 | } |
624 | } | 621 | } |
@@ -642,21 +639,21 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
642 | c.q = c.p; | 639 | c.q = c.p; |
643 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); | 640 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); |
644 | if (Tinf & 0x80) { | 641 | if (Tinf & 0x80) { |
645 | c.error = ERR_R_BAD_ASN1_OBJECT_HEADER; | 642 | SSLerr(SSL_F_D2I_SSL_SESSION, |
646 | c.line = __LINE__; | 643 | ERR_R_BAD_ASN1_OBJECT_HEADER); |
647 | goto err; | 644 | goto err; |
648 | } | 645 | } |
649 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) | 646 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) |
650 | Tlen = c.slen - (c.p - c.q) - 2; | 647 | Tlen = c.slen - (c.p - c.q) - 2; |
651 | if (d2i_ASN1_OCTET_STRING(&osp, &c.p, Tlen) == NULL) { | 648 | if (d2i_ASN1_OCTET_STRING(&osp, &c.p, Tlen) == NULL) { |
652 | c.line = __LINE__; | 649 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
653 | goto err; | 650 | goto err; |
654 | } | 651 | } |
655 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { | 652 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { |
656 | Tlen = c.slen - (c.p - c.q); | 653 | Tlen = c.slen - (c.p - c.q); |
657 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { | 654 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { |
658 | c.error = ERR_R_MISSING_ASN1_EOS; | 655 | SSLerr(SSL_F_D2I_SSL_SESSION, |
659 | c.line = __LINE__; | 656 | ERR_R_MISSING_ASN1_EOS); |
660 | goto err; | 657 | goto err; |
661 | } | 658 | } |
662 | } | 659 | } |
@@ -674,7 +671,7 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
674 | /* 12 - SRP username (OCTET STRING). */ | 671 | /* 12 - SRP username (OCTET STRING). */ |
675 | 672 | ||
676 | if (!asn1_const_Finish(&c)) { | 673 | if (!asn1_const_Finish(&c)) { |
677 | c.line = __LINE__; | 674 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
678 | goto err; | 675 | goto err; |
679 | } | 676 | } |
680 | 677 | ||
@@ -685,9 +682,7 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
685 | return (ret); | 682 | return (ret); |
686 | 683 | ||
687 | err: | 684 | err: |
688 | ERR_PUT_error(ERR_LIB_SSL, SSL_F_D2I_SSL_SESSION, | 685 | ERR_asprintf_error_data("address=%p offset=%d", *pp, (int)(c.q - *pp)); |
689 | c.error, __FILE__, c.line); | ||
690 | asn1_add_error(*pp, (int)(c.q - *pp)); | ||
691 | if (ret != NULL && (a == NULL || *a != ret)) | 686 | if (ret != NULL && (a == NULL || *a != ret)) |
692 | SSL_SESSION_free(ret); | 687 | SSL_SESSION_free(ret); |
693 | 688 | ||
diff --git a/src/lib/libssl/ssl_asn1.c b/src/lib/libssl/ssl_asn1.c index 90071000de..9e1e2e37a1 100644 --- a/src/lib/libssl/ssl_asn1.c +++ b/src/lib/libssl/ssl_asn1.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_asn1.c,v 1.34 2014/07/13 17:56:56 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_asn1.c,v 1.35 2014/07/13 21:35:27 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -274,11 +274,10 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
274 | c.p = *pp; | 274 | c.p = *pp; |
275 | c.q = *pp; | 275 | c.q = *pp; |
276 | c.max = (length == 0) ? 0 : (c.p + length); | 276 | c.max = (length == 0) ? 0 : (c.p + length); |
277 | c.error = ERR_R_NESTED_ASN1_ERROR; | ||
278 | 277 | ||
279 | if (a == NULL || *a == NULL) { | 278 | if (a == NULL || *a == NULL) { |
280 | if ((ret = SSL_SESSION_new()) == NULL) { | 279 | if ((ret = SSL_SESSION_new()) == NULL) { |
281 | c.line = __LINE__; | 280 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
282 | goto err; | 281 | goto err; |
283 | } | 282 | } |
284 | } else | 283 | } else |
@@ -288,7 +287,7 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
288 | osp = &os; | 287 | osp = &os; |
289 | 288 | ||
290 | if (!asn1_GetSequence(&c, &length)) { | 289 | if (!asn1_GetSequence(&c, &length)) { |
291 | c.line = __LINE__; | 290 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
292 | goto err; | 291 | goto err; |
293 | } | 292 | } |
294 | 293 | ||
@@ -296,7 +295,7 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
296 | ai.length = 0; | 295 | ai.length = 0; |
297 | c.q = c.p; | 296 | c.q = c.p; |
298 | if (d2i_ASN1_INTEGER(&aip, &c.p, c.slen) == NULL) { | 297 | if (d2i_ASN1_INTEGER(&aip, &c.p, c.slen) == NULL) { |
299 | c.line = __LINE__; | 298 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
300 | goto err; | 299 | goto err; |
301 | } | 300 | } |
302 | c.slen -= (c.p - c.q); | 301 | c.slen -= (c.p - c.q); |
@@ -310,7 +309,7 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
310 | /* we don't care about the version right now :-) */ | 309 | /* we don't care about the version right now :-) */ |
311 | c.q = c.p; | 310 | c.q = c.p; |
312 | if (d2i_ASN1_INTEGER(&aip, &c.p, c.slen) == NULL) { | 311 | if (d2i_ASN1_INTEGER(&aip, &c.p, c.slen) == NULL) { |
313 | c.line = __LINE__; | 312 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
314 | goto err; | 313 | goto err; |
315 | } | 314 | } |
316 | c.slen -= (c.p - c.q); | 315 | c.slen -= (c.p - c.q); |
@@ -326,21 +325,20 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
326 | os.length = 0; | 325 | os.length = 0; |
327 | c.q = c.p; | 326 | c.q = c.p; |
328 | if (d2i_ASN1_OCTET_STRING(&osp, &c.p, c.slen) == NULL) { | 327 | if (d2i_ASN1_OCTET_STRING(&osp, &c.p, c.slen) == NULL) { |
329 | c.line = __LINE__; | 328 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
330 | goto err; | 329 | goto err; |
331 | } | 330 | } |
332 | c.slen -= (c.p - c.q); | 331 | c.slen -= (c.p - c.q); |
333 | if ((ssl_version >> 8) >= SSL3_VERSION_MAJOR) { | 332 | if ((ssl_version >> 8) >= SSL3_VERSION_MAJOR) { |
334 | if (os.length != 2) { | 333 | if (os.length != 2) { |
335 | c.error = SSL_R_CIPHER_CODE_WRONG_LENGTH; | 334 | SSLerr(SSL_F_D2I_SSL_SESSION, |
336 | c.line = __LINE__; | 335 | SSL_R_CIPHER_CODE_WRONG_LENGTH); |
337 | goto err; | 336 | goto err; |
338 | } | 337 | } |
339 | id = 0x03000000L | ((unsigned long)os.data[0]<<8L) | | 338 | id = 0x03000000L | ((unsigned long)os.data[0]<<8L) | |
340 | (unsigned long)os.data[1]; | 339 | (unsigned long)os.data[1]; |
341 | } else { | 340 | } else { |
342 | c.error = SSL_R_UNKNOWN_SSL_VERSION; | 341 | SSLerr(SSL_F_D2I_SSL_SESSION, SSL_R_UNKNOWN_SSL_VERSION); |
343 | c.line = __LINE__; | ||
344 | goto err; | 342 | goto err; |
345 | } | 343 | } |
346 | 344 | ||
@@ -349,7 +347,7 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
349 | 347 | ||
350 | c.q = c.p; | 348 | c.q = c.p; |
351 | if (d2i_ASN1_OCTET_STRING(&osp, &c.p, c.slen) == NULL) { | 349 | if (d2i_ASN1_OCTET_STRING(&osp, &c.p, c.slen) == NULL) { |
352 | c.line = __LINE__; | 350 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
353 | goto err; | 351 | goto err; |
354 | } | 352 | } |
355 | c.slen -= (c.p - c.q); | 353 | c.slen -= (c.p - c.q); |
@@ -366,7 +364,7 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
366 | 364 | ||
367 | c.q = c.p; | 365 | c.q = c.p; |
368 | if (d2i_ASN1_OCTET_STRING(&osp, &c.p, c.slen) == NULL) { | 366 | if (d2i_ASN1_OCTET_STRING(&osp, &c.p, c.slen) == NULL) { |
369 | c.line = __LINE__; | 367 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
370 | goto err; | 368 | goto err; |
371 | } | 369 | } |
372 | c.slen -= (c.p - c.q); | 370 | c.slen -= (c.p - c.q); |
@@ -386,21 +384,21 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
386 | c.q = c.p; | 384 | c.q = c.p; |
387 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); | 385 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); |
388 | if (Tinf & 0x80) { | 386 | if (Tinf & 0x80) { |
389 | c.error = ERR_R_BAD_ASN1_OBJECT_HEADER; | 387 | SSLerr(SSL_F_D2I_SSL_SESSION, |
390 | c.line = __LINE__; | 388 | ERR_R_BAD_ASN1_OBJECT_HEADER); |
391 | goto err; | 389 | goto err; |
392 | } | 390 | } |
393 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) | 391 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) |
394 | Tlen = c.slen - (c.p - c.q) - 2; | 392 | Tlen = c.slen - (c.p - c.q) - 2; |
395 | if (d2i_ASN1_INTEGER(&aip, &c.p, Tlen) == NULL) { | 393 | if (d2i_ASN1_INTEGER(&aip, &c.p, Tlen) == NULL) { |
396 | c.line = __LINE__; | 394 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
397 | goto err; | 395 | goto err; |
398 | } | 396 | } |
399 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { | 397 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { |
400 | Tlen = c.slen - (c.p - c.q); | 398 | Tlen = c.slen - (c.p - c.q); |
401 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { | 399 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { |
402 | c.error = ERR_R_MISSING_ASN1_EOS; | 400 | SSLerr(SSL_F_D2I_SSL_SESSION, |
403 | c.line = __LINE__; | 401 | ERR_R_MISSING_ASN1_EOS); |
404 | goto err; | 402 | goto err; |
405 | } | 403 | } |
406 | } | 404 | } |
@@ -421,21 +419,21 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
421 | c.q = c.p; | 419 | c.q = c.p; |
422 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); | 420 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); |
423 | if (Tinf & 0x80) { | 421 | if (Tinf & 0x80) { |
424 | c.error = ERR_R_BAD_ASN1_OBJECT_HEADER; | 422 | SSLerr(SSL_F_D2I_SSL_SESSION, |
425 | c.line = __LINE__; | 423 | ERR_R_BAD_ASN1_OBJECT_HEADER); |
426 | goto err; | 424 | goto err; |
427 | } | 425 | } |
428 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) | 426 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) |
429 | Tlen = c.slen - (c.p - c.q) - 2; | 427 | Tlen = c.slen - (c.p - c.q) - 2; |
430 | if (d2i_ASN1_INTEGER(&aip, &c.p, Tlen) == NULL) { | 428 | if (d2i_ASN1_INTEGER(&aip, &c.p, Tlen) == NULL) { |
431 | c.line = __LINE__; | 429 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
432 | goto err; | 430 | goto err; |
433 | } | 431 | } |
434 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { | 432 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { |
435 | Tlen = c.slen - (c.p - c.q); | 433 | Tlen = c.slen - (c.p - c.q); |
436 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { | 434 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { |
437 | c.error = ERR_R_MISSING_ASN1_EOS; | 435 | SSLerr(SSL_F_D2I_SSL_SESSION, |
438 | c.line = __LINE__; | 436 | ERR_R_MISSING_ASN1_EOS); |
439 | goto err; | 437 | goto err; |
440 | } | 438 | } |
441 | } | 439 | } |
@@ -459,21 +457,21 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
459 | c.q = c.p; | 457 | c.q = c.p; |
460 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); | 458 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); |
461 | if (Tinf & 0x80) { | 459 | if (Tinf & 0x80) { |
462 | c.error = ERR_R_BAD_ASN1_OBJECT_HEADER; | 460 | SSLerr(SSL_F_D2I_SSL_SESSION, |
463 | c.line = __LINE__; | 461 | ERR_R_BAD_ASN1_OBJECT_HEADER); |
464 | goto err; | 462 | goto err; |
465 | } | 463 | } |
466 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) | 464 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) |
467 | Tlen = c.slen - (c.p - c.q) - 2; | 465 | Tlen = c.slen - (c.p - c.q) - 2; |
468 | if (d2i_X509(&ret->peer, &c.p, Tlen) == NULL) { | 466 | if (d2i_X509(&ret->peer, &c.p, Tlen) == NULL) { |
469 | c.line = __LINE__; | 467 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
470 | goto err; | 468 | goto err; |
471 | } | 469 | } |
472 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { | 470 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { |
473 | Tlen = c.slen - (c.p - c.q); | 471 | Tlen = c.slen - (c.p - c.q); |
474 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { | 472 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { |
475 | c.error = ERR_R_MISSING_ASN1_EOS; | 473 | SSLerr(SSL_F_D2I_SSL_SESSION, |
476 | c.line = __LINE__; | 474 | ERR_R_MISSING_ASN1_EOS); |
477 | goto err; | 475 | goto err; |
478 | } | 476 | } |
479 | } | 477 | } |
@@ -488,21 +486,21 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
488 | c.q = c.p; | 486 | c.q = c.p; |
489 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); | 487 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); |
490 | if (Tinf & 0x80) { | 488 | if (Tinf & 0x80) { |
491 | c.error = ERR_R_BAD_ASN1_OBJECT_HEADER; | 489 | SSLerr(SSL_F_D2I_SSL_SESSION, |
492 | c.line = __LINE__; | 490 | ERR_R_BAD_ASN1_OBJECT_HEADER); |
493 | goto err; | 491 | goto err; |
494 | } | 492 | } |
495 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) | 493 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) |
496 | Tlen = c.slen - (c.p - c.q) - 2; | 494 | Tlen = c.slen - (c.p - c.q) - 2; |
497 | if (d2i_ASN1_OCTET_STRING(&osp, &c.p, Tlen) == NULL) { | 495 | if (d2i_ASN1_OCTET_STRING(&osp, &c.p, Tlen) == NULL) { |
498 | c.line = __LINE__; | 496 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
499 | goto err; | 497 | goto err; |
500 | } | 498 | } |
501 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { | 499 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { |
502 | Tlen = c.slen - (c.p - c.q); | 500 | Tlen = c.slen - (c.p - c.q); |
503 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { | 501 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { |
504 | c.error = ERR_R_MISSING_ASN1_EOS; | 502 | SSLerr(SSL_F_D2I_SSL_SESSION, |
505 | c.line = __LINE__; | 503 | ERR_R_MISSING_ASN1_EOS); |
506 | goto err; | 504 | goto err; |
507 | } | 505 | } |
508 | } | 506 | } |
@@ -510,8 +508,7 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
510 | } | 508 | } |
511 | if (os.data != NULL) { | 509 | if (os.data != NULL) { |
512 | if (os.length > SSL_MAX_SID_CTX_LENGTH) { | 510 | if (os.length > SSL_MAX_SID_CTX_LENGTH) { |
513 | c.error = SSL_R_BAD_LENGTH; | 511 | SSLerr(SSL_F_D2I_SSL_SESSION, SSL_R_BAD_LENGTH); |
514 | c.line = __LINE__; | ||
515 | goto err; | 512 | goto err; |
516 | } else { | 513 | } else { |
517 | ret->sid_ctx_length = os.length; | 514 | ret->sid_ctx_length = os.length; |
@@ -530,21 +527,21 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
530 | c.q = c.p; | 527 | c.q = c.p; |
531 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); | 528 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); |
532 | if (Tinf & 0x80) { | 529 | if (Tinf & 0x80) { |
533 | c.error = ERR_R_BAD_ASN1_OBJECT_HEADER; | 530 | SSLerr(SSL_F_D2I_SSL_SESSION, |
534 | c.line = __LINE__; | 531 | ERR_R_BAD_ASN1_OBJECT_HEADER); |
535 | goto err; | 532 | goto err; |
536 | } | 533 | } |
537 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) | 534 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) |
538 | Tlen = c.slen - (c.p - c.q) - 2; | 535 | Tlen = c.slen - (c.p - c.q) - 2; |
539 | if (d2i_ASN1_INTEGER(&aip, &c.p, Tlen) == NULL) { | 536 | if (d2i_ASN1_INTEGER(&aip, &c.p, Tlen) == NULL) { |
540 | c.line = __LINE__; | 537 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
541 | goto err; | 538 | goto err; |
542 | } | 539 | } |
543 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { | 540 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { |
544 | Tlen = c.slen - (c.p - c.q); | 541 | Tlen = c.slen - (c.p - c.q); |
545 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { | 542 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { |
546 | c.error = ERR_R_MISSING_ASN1_EOS; | 543 | SSLerr(SSL_F_D2I_SSL_SESSION, |
547 | c.line = __LINE__; | 544 | ERR_R_MISSING_ASN1_EOS); |
548 | goto err; | 545 | goto err; |
549 | } | 546 | } |
550 | } | 547 | } |
@@ -566,21 +563,21 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
566 | c.q = c.p; | 563 | c.q = c.p; |
567 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); | 564 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); |
568 | if (Tinf & 0x80) { | 565 | if (Tinf & 0x80) { |
569 | c.error = ERR_R_BAD_ASN1_OBJECT_HEADER; | 566 | SSLerr(SSL_F_D2I_SSL_SESSION, |
570 | c.line = __LINE__; | 567 | ERR_R_BAD_ASN1_OBJECT_HEADER); |
571 | goto err; | 568 | goto err; |
572 | } | 569 | } |
573 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) | 570 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) |
574 | Tlen = c.slen - (c.p - c.q) - 2; | 571 | Tlen = c.slen - (c.p - c.q) - 2; |
575 | if (d2i_ASN1_OCTET_STRING(&osp, &c.p, Tlen) == NULL) { | 572 | if (d2i_ASN1_OCTET_STRING(&osp, &c.p, Tlen) == NULL) { |
576 | c.line = __LINE__; | 573 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
577 | goto err; | 574 | goto err; |
578 | } | 575 | } |
579 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { | 576 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { |
580 | Tlen = c.slen - (c.p - c.q); | 577 | Tlen = c.slen - (c.p - c.q); |
581 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { | 578 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { |
582 | c.error = ERR_R_MISSING_ASN1_EOS; | 579 | SSLerr(SSL_F_D2I_SSL_SESSION, |
583 | c.line = __LINE__; | 580 | ERR_R_MISSING_ASN1_EOS); |
584 | goto err; | 581 | goto err; |
585 | } | 582 | } |
586 | } | 583 | } |
@@ -604,21 +601,21 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
604 | c.q = c.p; | 601 | c.q = c.p; |
605 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); | 602 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); |
606 | if (Tinf & 0x80) { | 603 | if (Tinf & 0x80) { |
607 | c.error = ERR_R_BAD_ASN1_OBJECT_HEADER; | 604 | SSLerr(SSL_F_D2I_SSL_SESSION, |
608 | c.line = __LINE__; | 605 | ERR_R_BAD_ASN1_OBJECT_HEADER); |
609 | goto err; | 606 | goto err; |
610 | } | 607 | } |
611 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) | 608 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) |
612 | Tlen = c.slen - (c.p - c.q) - 2; | 609 | Tlen = c.slen - (c.p - c.q) - 2; |
613 | if (d2i_ASN1_INTEGER(&aip, &c.p, Tlen) == NULL) { | 610 | if (d2i_ASN1_INTEGER(&aip, &c.p, Tlen) == NULL) { |
614 | c.line = __LINE__; | 611 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
615 | goto err; | 612 | goto err; |
616 | } | 613 | } |
617 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { | 614 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { |
618 | Tlen = c.slen - (c.p - c.q); | 615 | Tlen = c.slen - (c.p - c.q); |
619 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { | 616 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { |
620 | c.error = ERR_R_MISSING_ASN1_EOS; | 617 | SSLerr(SSL_F_D2I_SSL_SESSION, |
621 | c.line = __LINE__; | 618 | ERR_R_MISSING_ASN1_EOS); |
622 | goto err; | 619 | goto err; |
623 | } | 620 | } |
624 | } | 621 | } |
@@ -642,21 +639,21 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
642 | c.q = c.p; | 639 | c.q = c.p; |
643 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); | 640 | Tinf = ASN1_get_object(&c.p, &Tlen, &Ttag, &Tclass, c.slen); |
644 | if (Tinf & 0x80) { | 641 | if (Tinf & 0x80) { |
645 | c.error = ERR_R_BAD_ASN1_OBJECT_HEADER; | 642 | SSLerr(SSL_F_D2I_SSL_SESSION, |
646 | c.line = __LINE__; | 643 | ERR_R_BAD_ASN1_OBJECT_HEADER); |
647 | goto err; | 644 | goto err; |
648 | } | 645 | } |
649 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) | 646 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) |
650 | Tlen = c.slen - (c.p - c.q) - 2; | 647 | Tlen = c.slen - (c.p - c.q) - 2; |
651 | if (d2i_ASN1_OCTET_STRING(&osp, &c.p, Tlen) == NULL) { | 648 | if (d2i_ASN1_OCTET_STRING(&osp, &c.p, Tlen) == NULL) { |
652 | c.line = __LINE__; | 649 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
653 | goto err; | 650 | goto err; |
654 | } | 651 | } |
655 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { | 652 | if (Tinf == (V_ASN1_CONSTRUCTED + 1)) { |
656 | Tlen = c.slen - (c.p - c.q); | 653 | Tlen = c.slen - (c.p - c.q); |
657 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { | 654 | if(!ASN1_const_check_infinite_end(&c.p, Tlen)) { |
658 | c.error = ERR_R_MISSING_ASN1_EOS; | 655 | SSLerr(SSL_F_D2I_SSL_SESSION, |
659 | c.line = __LINE__; | 656 | ERR_R_MISSING_ASN1_EOS); |
660 | goto err; | 657 | goto err; |
661 | } | 658 | } |
662 | } | 659 | } |
@@ -674,7 +671,7 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
674 | /* 12 - SRP username (OCTET STRING). */ | 671 | /* 12 - SRP username (OCTET STRING). */ |
675 | 672 | ||
676 | if (!asn1_const_Finish(&c)) { | 673 | if (!asn1_const_Finish(&c)) { |
677 | c.line = __LINE__; | 674 | SSLerr(SSL_F_D2I_SSL_SESSION, ERR_R_NESTED_ASN1_ERROR); |
678 | goto err; | 675 | goto err; |
679 | } | 676 | } |
680 | 677 | ||
@@ -685,9 +682,7 @@ d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length) | |||
685 | return (ret); | 682 | return (ret); |
686 | 683 | ||
687 | err: | 684 | err: |
688 | ERR_PUT_error(ERR_LIB_SSL, SSL_F_D2I_SSL_SESSION, | 685 | ERR_asprintf_error_data("address=%p offset=%d", *pp, (int)(c.q - *pp)); |
689 | c.error, __FILE__, c.line); | ||
690 | asn1_add_error(*pp, (int)(c.q - *pp)); | ||
691 | if (ret != NULL && (a == NULL || *a != ret)) | 686 | if (ret != NULL && (a == NULL || *a != ret)) |
692 | SSL_SESSION_free(ret); | 687 | SSL_SESSION_free(ret); |
693 | 688 | ||