Bug Summary

File:s/lib/libpkix/pkix_pl_nss/pki/pkix_pl_crlentry.c
Warning:line 764, column 40
Access to field 'serialNumber' results in a dereference of a null pointer (loaded from variable 'crlEntry')

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple x86_64-pc-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name pkix_pl_crlentry.c -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -analyzer-config-compatibility-mode=true -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fdebug-compilation-dir=/var/lib/jenkins/workspace/nss-scan-build/nss/lib/libpkix/pkix_pl_nss/pki -ffunction-sections -fdata-sections -fcoverage-compilation-dir=/var/lib/jenkins/workspace/nss-scan-build/nss/lib/libpkix/pkix_pl_nss/pki -resource-dir /usr/lib/llvm-18/lib/clang/18 -D HAVE_STRERROR -D LINUX -D linux -D XP_UNIX -D XP_UNIX -D DEBUG -U NDEBUG -D _DEFAULT_SOURCE -D _BSD_SOURCE -D _POSIX_SOURCE -D SDB_MEASURE_USE_TEMP_DIR -D _REENTRANT -D DEBUG -U NDEBUG -D _DEFAULT_SOURCE -D _BSD_SOURCE -D _POSIX_SOURCE -D SDB_MEASURE_USE_TEMP_DIR -D _REENTRANT -D NSS_DISABLE_SSE3 -D NSS_NO_INIT_SUPPORT -D USE_UTIL_DIRECTLY -D NO_NSPR_10_SUPPORT -D SSL_DISABLE_DEPRECATED_CIPHER_SUITE_NAMES -I ../../../../../dist/Linux4.19_x86_64_gcc_glibc_PTH_64_DBG.OBJ/include -I ../../../../../dist/public/nss -I ../../../../../dist/private/nss -internal-isystem /usr/lib/llvm-18/lib/clang/18/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/14/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -std=c99 -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-output=html -analyzer-config stable-report-filename=true -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/scan-build-2024-05-18-082241-28900-1 -x c pkix_pl_crlentry.c
1/* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4/*
5 * pkix_pl_crlentry.c
6 *
7 * CRLENTRY Function Definitions
8 *
9 */
10
11#include "pkix_pl_crlentry.h"
12
13/* --Private-CRLEntry-Functions------------------------------------- */
14
15/*
16 * FUNCTION: pkix_pl_CRLEntry_Destroy
17 * (see comments for PKIX_PL_DestructorCallback in pkix_pl_system.h)
18 */
19static PKIX_Error *
20pkix_pl_CRLEntry_Destroy(
21 PKIX_PL_Object *object,
22 void *plContext)
23{
24 PKIX_PL_CRLEntry *crlEntry = NULL((void*)0);
25
26 PKIX_ENTER(CRLENTRY, "pkix_pl_CRLEntry_Destroy")static const char cMyFuncName[] = {"pkix_pl_CRLEntry_Destroy"
}; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName
; stdVars.aPkixType = PKIX_CRLENTRY_ERROR; ; do { if (pkixLoggersDebugTrace
) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName
, ">>>", stdVars.aPkixType, 5, plContext); } } while
(0);
;
27 PKIX_NULLCHECK_ONE(object)do { if ((object) == ((void*)0)){ stdVars.aPkixErrorReceived =
((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT
; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean
) 1), plContext);; } } while (0)
;
28
29 PKIX_CHECK(pkix_CheckType(object, PKIX_CRLENTRY_TYPE, plContext),do { stdVars.aPkixErrorResult = (pkix_CheckType(object, PKIX_CRLENTRY_TYPE
, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass
= stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_OBJECTNOTCRLENTRY; goto cleanup; } } while (0)
30 PKIX_OBJECTNOTCRLENTRY)do { stdVars.aPkixErrorResult = (pkix_CheckType(object, PKIX_CRLENTRY_TYPE
, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass
= stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_OBJECTNOTCRLENTRY; goto cleanup; } } while (0)
;
31
32 crlEntry = (PKIX_PL_CRLEntry*)object;
33
34 /* crlEntry->nssCrlEntry is freed by NSS when freeing CRL */
35 crlEntry->userReasonCode = 0;
36 crlEntry->userReasonCodeAbsent = PKIX_FALSE((PKIX_Boolean) 0);
37 crlEntry->nssCrlEntry = NULL((void*)0);
38 PKIX_DECREF(crlEntry->serialNumber)do { if (crlEntry->serialNumber){ stdVars.aPkixTempResult =
PKIX_PL_Object_DecRef ((PKIX_PL_Object *)(crlEntry->serialNumber
), plContext); if (stdVars.aPkixTempResult) { PKIX_DoAddError
(&stdVars, stdVars.aPkixTempResult, plContext); stdVars.aPkixTempResult
= ((void*)0); } crlEntry->serialNumber = ((void*)0); } } while
(0)
;
39 PKIX_DECREF(crlEntry->critExtOids)do { if (crlEntry->critExtOids){ stdVars.aPkixTempResult =
PKIX_PL_Object_DecRef ((PKIX_PL_Object *)(crlEntry->critExtOids
), plContext); if (stdVars.aPkixTempResult) { PKIX_DoAddError
(&stdVars, stdVars.aPkixTempResult, plContext); stdVars.aPkixTempResult
= ((void*)0); } crlEntry->critExtOids = ((void*)0); } } while
(0)
;
40
41cleanup:
42
43 PKIX_RETURN(CRLENTRY)return PKIX_DoReturn(&stdVars, (PKIX_CRLENTRY_ERROR), ((PKIX_Boolean
) 1), plContext);
;
44}
45
46/*
47 * FUNCTION: pkix_pl_CRLEntry_ToString_Helper
48 *
49 * DESCRIPTION:
50 * Helper function that creates a string representation of the CRLEntry
51 * pointed to by "crlEntry" and stores it at "pString".
52 *
53 * PARAMETERS
54 * "crlEntry"
55 * Address of CRLEntry whose string representation is desired.
56 * Must be non-NULL.
57 * "pString"
58 * Address where object pointer will be stored. Must be non-NULL.
59 * "plContext"
60 * Platform-specific context pointer.
61 * THREAD SAFETY:
62 * Thread Safe (see Thread Safety Definitions in Programmer's Guide)
63 * RETURNS:
64 * Returns NULL if the function succeeds.
65 * Returns a CRLEntry Error if the function fails in a non-fatal way.
66 * Returns a Fatal Error if the function fails in an unrecoverable way.
67 */
68PKIX_Error *
69pkix_pl_CRLEntry_ToString_Helper(
70 PKIX_PL_CRLEntry *crlEntry,
71 PKIX_PL_String **pString,
72 void *plContext)
73{
74 char *asciiFormat = NULL((void*)0);
75 PKIX_List *critExtOIDs = NULL((void*)0);
76 PKIX_PL_String *crlEntryString = NULL((void*)0);
77 PKIX_PL_String *formatString = NULL((void*)0);
78 PKIX_PL_String *crlSerialNumberString = NULL((void*)0);
79 PKIX_PL_String *crlRevocationDateString = NULL((void*)0);
80 PKIX_PL_String *critExtOIDsString = NULL((void*)0);
81 PKIX_Int32 reasonCode = 0;
82
83 PKIX_ENTER(CRLENTRY, "pkix_pl_CRLEntry_ToString_Helper")static const char cMyFuncName[] = {"pkix_pl_CRLEntry_ToString_Helper"
}; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName
; stdVars.aPkixType = PKIX_CRLENTRY_ERROR; ; do { if (pkixLoggersDebugTrace
) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName
, ">>>", stdVars.aPkixType, 5, plContext); } } while
(0);
;
84 PKIX_NULLCHECK_FOURdo { if (((crlEntry) == ((void*)0)) || ((crlEntry->serialNumber
) == ((void*)0)) || ((crlEntry->nssCrlEntry) == ((void*)0)
) || ((pString) == ((void*)0))){ stdVars.aPkixErrorReceived =
((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT
; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean
) 1), plContext);; } } while (0)
85 (crlEntry,do { if (((crlEntry) == ((void*)0)) || ((crlEntry->serialNumber
) == ((void*)0)) || ((crlEntry->nssCrlEntry) == ((void*)0)
) || ((pString) == ((void*)0))){ stdVars.aPkixErrorReceived =
((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT
; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean
) 1), plContext);; } } while (0)
86 crlEntry->serialNumber,do { if (((crlEntry) == ((void*)0)) || ((crlEntry->serialNumber
) == ((void*)0)) || ((crlEntry->nssCrlEntry) == ((void*)0)
) || ((pString) == ((void*)0))){ stdVars.aPkixErrorReceived =
((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT
; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean
) 1), plContext);; } } while (0)
87 crlEntry->nssCrlEntry,do { if (((crlEntry) == ((void*)0)) || ((crlEntry->serialNumber
) == ((void*)0)) || ((crlEntry->nssCrlEntry) == ((void*)0)
) || ((pString) == ((void*)0))){ stdVars.aPkixErrorReceived =
((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT
; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean
) 1), plContext);; } } while (0)
88 pString)do { if (((crlEntry) == ((void*)0)) || ((crlEntry->serialNumber
) == ((void*)0)) || ((crlEntry->nssCrlEntry) == ((void*)0)
) || ((pString) == ((void*)0))){ stdVars.aPkixErrorReceived =
((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT
; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean
) 1), plContext);; } } while (0)
;
89
90 asciiFormat =
91 "\n\t[\n"
92 "\tSerialNumber: %s\n"
93 "\tReasonCode: %d\n"
94 "\tRevocationDate: %s\n"
95 "\tCritExtOIDs: %s\n"
96 "\t]\n\t";
97
98 PKIX_CHECK(PKIX_PL_String_Createdo { stdVars.aPkixErrorResult = (PKIX_PL_String_Create (0, asciiFormat
, 0, &formatString, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_STRINGCREATEFAILED; goto cleanup
; } } while (0)
99 (PKIX_ESCASCII,do { stdVars.aPkixErrorResult = (PKIX_PL_String_Create (0, asciiFormat
, 0, &formatString, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_STRINGCREATEFAILED; goto cleanup
; } } while (0)
100 asciiFormat,do { stdVars.aPkixErrorResult = (PKIX_PL_String_Create (0, asciiFormat
, 0, &formatString, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_STRINGCREATEFAILED; goto cleanup
; } } while (0)
101 0,do { stdVars.aPkixErrorResult = (PKIX_PL_String_Create (0, asciiFormat
, 0, &formatString, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_STRINGCREATEFAILED; goto cleanup
; } } while (0)
102 &formatString,do { stdVars.aPkixErrorResult = (PKIX_PL_String_Create (0, asciiFormat
, 0, &formatString, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_STRINGCREATEFAILED; goto cleanup
; } } while (0)
103 plContext),do { stdVars.aPkixErrorResult = (PKIX_PL_String_Create (0, asciiFormat
, 0, &formatString, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_STRINGCREATEFAILED; goto cleanup
; } } while (0)
104 PKIX_STRINGCREATEFAILED)do { stdVars.aPkixErrorResult = (PKIX_PL_String_Create (0, asciiFormat
, 0, &formatString, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_STRINGCREATEFAILED; goto cleanup
; } } while (0)
;
105
106 /* SerialNumber */
107 PKIX_CHECK(PKIX_PL_Object_ToStringdo { stdVars.aPkixErrorResult = (PKIX_PL_Object_ToString ((PKIX_PL_Object
*)crlEntry->serialNumber, &crlSerialNumberString, plContext
)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass =
stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_BIGINTTOSTRINGHELPERFAILED; goto cleanup; } } while (
0)
108 ((PKIX_PL_Object *)crlEntry->serialNumber,do { stdVars.aPkixErrorResult = (PKIX_PL_Object_ToString ((PKIX_PL_Object
*)crlEntry->serialNumber, &crlSerialNumberString, plContext
)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass =
stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_BIGINTTOSTRINGHELPERFAILED; goto cleanup; } } while (
0)
109 &crlSerialNumberString,do { stdVars.aPkixErrorResult = (PKIX_PL_Object_ToString ((PKIX_PL_Object
*)crlEntry->serialNumber, &crlSerialNumberString, plContext
)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass =
stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_BIGINTTOSTRINGHELPERFAILED; goto cleanup; } } while (
0)
110 plContext),do { stdVars.aPkixErrorResult = (PKIX_PL_Object_ToString ((PKIX_PL_Object
*)crlEntry->serialNumber, &crlSerialNumberString, plContext
)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass =
stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_BIGINTTOSTRINGHELPERFAILED; goto cleanup; } } while (
0)
111 PKIX_BIGINTTOSTRINGHELPERFAILED)do { stdVars.aPkixErrorResult = (PKIX_PL_Object_ToString ((PKIX_PL_Object
*)crlEntry->serialNumber, &crlSerialNumberString, plContext
)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass =
stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_BIGINTTOSTRINGHELPERFAILED; goto cleanup; } } while (
0)
;
112
113 /* RevocationDate - No Date object created, use nss data directly */
114 PKIX_CHECK(pkix_pl_Date_ToString_Helperdo { stdVars.aPkixErrorResult = (pkix_pl_Date_ToString_Helper
(&(crlEntry->nssCrlEntry->revocationDate), &crlRevocationDateString
, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass
= stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_DATETOSTRINGHELPERFAILED; goto cleanup; } } while (0)
115 (&(crlEntry->nssCrlEntry->revocationDate),do { stdVars.aPkixErrorResult = (pkix_pl_Date_ToString_Helper
(&(crlEntry->nssCrlEntry->revocationDate), &crlRevocationDateString
, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass
= stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_DATETOSTRINGHELPERFAILED; goto cleanup; } } while (0)
116 &crlRevocationDateString,do { stdVars.aPkixErrorResult = (pkix_pl_Date_ToString_Helper
(&(crlEntry->nssCrlEntry->revocationDate), &crlRevocationDateString
, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass
= stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_DATETOSTRINGHELPERFAILED; goto cleanup; } } while (0)
117 plContext),do { stdVars.aPkixErrorResult = (pkix_pl_Date_ToString_Helper
(&(crlEntry->nssCrlEntry->revocationDate), &crlRevocationDateString
, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass
= stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_DATETOSTRINGHELPERFAILED; goto cleanup; } } while (0)
118 PKIX_DATETOSTRINGHELPERFAILED)do { stdVars.aPkixErrorResult = (pkix_pl_Date_ToString_Helper
(&(crlEntry->nssCrlEntry->revocationDate), &crlRevocationDateString
, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass
= stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_DATETOSTRINGHELPERFAILED; goto cleanup; } } while (0)
;
119
120 /* CriticalExtensionOIDs */
121 PKIX_CHECK(PKIX_PL_CRLEntry_GetCriticalExtensionOIDsdo { stdVars.aPkixErrorResult = (PKIX_PL_CRLEntry_GetCriticalExtensionOIDs
(crlEntry, &critExtOIDs, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_CRLENTRYGETCRITICALEXTENSIONOIDSFAILED
; goto cleanup; } } while (0)
122 (crlEntry, &critExtOIDs, plContext),do { stdVars.aPkixErrorResult = (PKIX_PL_CRLEntry_GetCriticalExtensionOIDs
(crlEntry, &critExtOIDs, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_CRLENTRYGETCRITICALEXTENSIONOIDSFAILED
; goto cleanup; } } while (0)
123 PKIX_CRLENTRYGETCRITICALEXTENSIONOIDSFAILED)do { stdVars.aPkixErrorResult = (PKIX_PL_CRLEntry_GetCriticalExtensionOIDs
(crlEntry, &critExtOIDs, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_CRLENTRYGETCRITICALEXTENSIONOIDSFAILED
; goto cleanup; } } while (0)
;
124
125 PKIX_TOSTRING(critExtOIDs, &critExtOIDsString, plContext,do { int descNum; if ((critExtOIDs) != ((void*)0)) { stdVars.
aPkixErrorResult = PKIX_PL_Object_ToString((PKIX_PL_Object *)
(critExtOIDs), (&critExtOIDsString), (plContext)); descNum
= (PKIX_LISTTOSTRINGFAILED); } else { stdVars.aPkixErrorResult
= PKIX_PL_String_Create(0, "(null)", 0, (&critExtOIDsString
), (plContext)); descNum = PKIX_STRINGCREATEFAILED; } do { stdVars
.aPkixErrorResult = (stdVars.aPkixErrorResult); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = descNum; goto cleanup; } } while (
0); } while (0)
126 PKIX_LISTTOSTRINGFAILED)do { int descNum; if ((critExtOIDs) != ((void*)0)) { stdVars.
aPkixErrorResult = PKIX_PL_Object_ToString((PKIX_PL_Object *)
(critExtOIDs), (&critExtOIDsString), (plContext)); descNum
= (PKIX_LISTTOSTRINGFAILED); } else { stdVars.aPkixErrorResult
= PKIX_PL_String_Create(0, "(null)", 0, (&critExtOIDsString
), (plContext)); descNum = PKIX_STRINGCREATEFAILED; } do { stdVars
.aPkixErrorResult = (stdVars.aPkixErrorResult); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = descNum; goto cleanup; } } while (
0); } while (0)
;
127
128 /* Revocation Reason Code */
129 PKIX_CHECK(PKIX_PL_CRLEntry_GetCRLEntryReasonCodedo { stdVars.aPkixErrorResult = (PKIX_PL_CRLEntry_GetCRLEntryReasonCode
(crlEntry, &reasonCode, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_CRLENTRYGETCRLENTRYREASONCODEFAILED
; goto cleanup; } } while (0)
130 (crlEntry, &reasonCode, plContext),do { stdVars.aPkixErrorResult = (PKIX_PL_CRLEntry_GetCRLEntryReasonCode
(crlEntry, &reasonCode, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_CRLENTRYGETCRLENTRYREASONCODEFAILED
; goto cleanup; } } while (0)
131 PKIX_CRLENTRYGETCRLENTRYREASONCODEFAILED)do { stdVars.aPkixErrorResult = (PKIX_PL_CRLEntry_GetCRLEntryReasonCode
(crlEntry, &reasonCode, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_CRLENTRYGETCRLENTRYREASONCODEFAILED
; goto cleanup; } } while (0)
;
132
133 PKIX_CHECK(PKIX_PL_Sprintfdo { stdVars.aPkixErrorResult = (PKIX_PL_Sprintf (&crlEntryString
, plContext, formatString, crlSerialNumberString, reasonCode,
crlRevocationDateString, critExtOIDsString)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_SPRINTFFAILED; goto cleanup; }
} while (0)
134 (&crlEntryString,do { stdVars.aPkixErrorResult = (PKIX_PL_Sprintf (&crlEntryString
, plContext, formatString, crlSerialNumberString, reasonCode,
crlRevocationDateString, critExtOIDsString)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_SPRINTFFAILED; goto cleanup; }
} while (0)
135 plContext,do { stdVars.aPkixErrorResult = (PKIX_PL_Sprintf (&crlEntryString
, plContext, formatString, crlSerialNumberString, reasonCode,
crlRevocationDateString, critExtOIDsString)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_SPRINTFFAILED; goto cleanup; }
} while (0)
136 formatString,do { stdVars.aPkixErrorResult = (PKIX_PL_Sprintf (&crlEntryString
, plContext, formatString, crlSerialNumberString, reasonCode,
crlRevocationDateString, critExtOIDsString)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_SPRINTFFAILED; goto cleanup; }
} while (0)
137 crlSerialNumberString,do { stdVars.aPkixErrorResult = (PKIX_PL_Sprintf (&crlEntryString
, plContext, formatString, crlSerialNumberString, reasonCode,
crlRevocationDateString, critExtOIDsString)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_SPRINTFFAILED; goto cleanup; }
} while (0)
138 reasonCode,do { stdVars.aPkixErrorResult = (PKIX_PL_Sprintf (&crlEntryString
, plContext, formatString, crlSerialNumberString, reasonCode,
crlRevocationDateString, critExtOIDsString)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_SPRINTFFAILED; goto cleanup; }
} while (0)
139 crlRevocationDateString,do { stdVars.aPkixErrorResult = (PKIX_PL_Sprintf (&crlEntryString
, plContext, formatString, crlSerialNumberString, reasonCode,
crlRevocationDateString, critExtOIDsString)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_SPRINTFFAILED; goto cleanup; }
} while (0)
140 critExtOIDsString),do { stdVars.aPkixErrorResult = (PKIX_PL_Sprintf (&crlEntryString
, plContext, formatString, crlSerialNumberString, reasonCode,
crlRevocationDateString, critExtOIDsString)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_SPRINTFFAILED; goto cleanup; }
} while (0)
141 PKIX_SPRINTFFAILED)do { stdVars.aPkixErrorResult = (PKIX_PL_Sprintf (&crlEntryString
, plContext, formatString, crlSerialNumberString, reasonCode,
crlRevocationDateString, critExtOIDsString)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_SPRINTFFAILED; goto cleanup; }
} while (0)
;
142
143 *pString = crlEntryString;
144
145cleanup:
146
147 PKIX_DECREF(critExtOIDs)do { if (critExtOIDs){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef
((PKIX_PL_Object *)(critExtOIDs), plContext); if (stdVars.aPkixTempResult
) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult, plContext
); stdVars.aPkixTempResult = ((void*)0); } critExtOIDs = ((void
*)0); } } while (0)
;
148 PKIX_DECREF(crlSerialNumberString)do { if (crlSerialNumberString){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef
((PKIX_PL_Object *)(crlSerialNumberString), plContext); if (
stdVars.aPkixTempResult) { PKIX_DoAddError(&stdVars, stdVars
.aPkixTempResult, plContext); stdVars.aPkixTempResult = ((void
*)0); } crlSerialNumberString = ((void*)0); } } while (0)
;
149 PKIX_DECREF(crlRevocationDateString)do { if (crlRevocationDateString){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef
((PKIX_PL_Object *)(crlRevocationDateString), plContext); if
(stdVars.aPkixTempResult) { PKIX_DoAddError(&stdVars, stdVars
.aPkixTempResult, plContext); stdVars.aPkixTempResult = ((void
*)0); } crlRevocationDateString = ((void*)0); } } while (0)
;
150 PKIX_DECREF(critExtOIDsString)do { if (critExtOIDsString){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef
((PKIX_PL_Object *)(critExtOIDsString), plContext); if (stdVars
.aPkixTempResult) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult
, plContext); stdVars.aPkixTempResult = ((void*)0); } critExtOIDsString
= ((void*)0); } } while (0)
;
151 PKIX_DECREF(formatString)do { if (formatString){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef
((PKIX_PL_Object *)(formatString), plContext); if (stdVars.aPkixTempResult
) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult, plContext
); stdVars.aPkixTempResult = ((void*)0); } formatString = ((void
*)0); } } while (0)
;
152
153 PKIX_RETURN(CRLENTRY)return PKIX_DoReturn(&stdVars, (PKIX_CRLENTRY_ERROR), ((PKIX_Boolean
) 1), plContext);
;
154}
155
156/*
157 * FUNCTION: pkix_pl_CRLEntry_ToString
158 * (see comments for PKIX_PL_ToStringCallback in pkix_pl_system.h)
159 */
160static PKIX_Error *
161pkix_pl_CRLEntry_ToString(
162 PKIX_PL_Object *object,
163 PKIX_PL_String **pString,
164 void *plContext)
165{
166 PKIX_PL_String *crlEntryString = NULL((void*)0);
167 PKIX_PL_CRLEntry *crlEntry = NULL((void*)0);
168
169 PKIX_ENTER(CRLENTRY, "pkix_pl_CRLEntry_ToString")static const char cMyFuncName[] = {"pkix_pl_CRLEntry_ToString"
}; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName
; stdVars.aPkixType = PKIX_CRLENTRY_ERROR; ; do { if (pkixLoggersDebugTrace
) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName
, ">>>", stdVars.aPkixType, 5, plContext); } } while
(0);
;
170 PKIX_NULLCHECK_TWO(object, pString)do { if (((object) == ((void*)0)) || ((pString) == ((void*)0)
)){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars.
aPkixErrorCode = PKIX_NULLARGUMENT; return PKIX_DoReturn(&
stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean) 1), plContext);;
} } while (0)
;
171
172 PKIX_CHECK(pkix_CheckType(object, PKIX_CRLENTRY_TYPE, plContext),do { stdVars.aPkixErrorResult = (pkix_CheckType(object, PKIX_CRLENTRY_TYPE
, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass
= stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_OBJECTNOTCRLENTRY; goto cleanup; } } while (0)
173 PKIX_OBJECTNOTCRLENTRY)do { stdVars.aPkixErrorResult = (pkix_CheckType(object, PKIX_CRLENTRY_TYPE
, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass
= stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_OBJECTNOTCRLENTRY; goto cleanup; } } while (0)
;
174
175 crlEntry = (PKIX_PL_CRLEntry *) object;
176
177 PKIX_CHECK(pkix_pl_CRLEntry_ToString_Helperdo { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_ToString_Helper
(crlEntry, &crlEntryString, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_CRLENTRYTOSTRINGHELPERFAILED;
goto cleanup; } } while (0)
178 (crlEntry, &crlEntryString, plContext),do { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_ToString_Helper
(crlEntry, &crlEntryString, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_CRLENTRYTOSTRINGHELPERFAILED;
goto cleanup; } } while (0)
179 PKIX_CRLENTRYTOSTRINGHELPERFAILED)do { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_ToString_Helper
(crlEntry, &crlEntryString, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_CRLENTRYTOSTRINGHELPERFAILED;
goto cleanup; } } while (0)
;
180
181 *pString = crlEntryString;
182
183cleanup:
184
185 PKIX_RETURN(CRLENTRY)return PKIX_DoReturn(&stdVars, (PKIX_CRLENTRY_ERROR), ((PKIX_Boolean
) 1), plContext);
;
186}
187
188/*
189 * FUNCTION: pkix_pl_CRLEntry_Extensions_Hashcode
190 * DESCRIPTION:
191 *
192 * For each CRL Entry extension stored at NSS structure CERTCertExtension,
193 * get its derbyte data and do the hash.
194 *
195 * PARAMETERS
196 * "extensions"
197 * Address of arrray of CERTCertExtension whose hash value is desired.
198 * Must be non-NULL.
199 * "pHashValue"
200 * Address where the final hash value is returned. Must be non-NULL.
201 * "plContext"
202 * Platform-specific context pointer.
203 * THREAD SAFETY:
204 * Conditional Thread Safe
205 * Though the value of extensions once created is not supposed to change,
206 * it may be de-allocated while we are accessing it. But since we are
207 * validating the object, it is unlikely we or someone is de-allocating
208 * at the moment.
209 * RETURNS:
210 * Returns NULL if the function succeeds.
211 * Returns an OID Error if the function fails in a non-fatal way.
212 * Returns a Fatal Error if the function fails in an unrecoverable way.
213 */
214static PKIX_Error *
215pkix_pl_CRLEntry_Extensions_Hashcode(
216 CERTCertExtension **extensions,
217 PKIX_UInt32 *pHashValue,
218 void *plContext)
219{
220 CERTCertExtension *extension = NULL((void*)0);
221 PLArenaPool *arena = NULL((void*)0);
222 PKIX_UInt32 extHash = 0;
223 PKIX_UInt32 hashValue = 0;
224 SECItem *derBytes = NULL((void*)0);
225 SECItem *resultSecItem = NULL((void*)0);
226
227 PKIX_ENTER(CRLENTRY, "pkix_pl_CRLEntry_Extensions_Hashcode")static const char cMyFuncName[] = {"pkix_pl_CRLEntry_Extensions_Hashcode"
}; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName
; stdVars.aPkixType = PKIX_CRLENTRY_ERROR; ; do { if (pkixLoggersDebugTrace
) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName
, ">>>", stdVars.aPkixType, 5, plContext); } } while
(0);
;
228 PKIX_NULLCHECK_TWO(extensions, pHashValue)do { if (((extensions) == ((void*)0)) || ((pHashValue) == ((void
*)0))){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars
.aPkixErrorCode = PKIX_NULLARGUMENT; return PKIX_DoReturn(&
stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean) 1), plContext);;
} } while (0)
;
229
230 if (extensions) {
231
232 PKIX_CRLENTRY_DEBUG("\t\tCalling PORT_NewArena\n");
233 arena = PORT_NewArenaPORT_NewArena_Util(DER_DEFAULT_CHUNKSIZE(2048));
234 if (arena == NULL((void*)0)) {
235 PKIX_ERROR(PKIX_OUTOFMEMORY){ { if (pkixLoggersErrors) { pkix_Logger_CheckWithCode(pkixLoggersErrors
, PKIX_OUTOFMEMORY, ((void*)0), stdVars.aPkixType, 2, plContext
); } } stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars
.aPkixErrorCode = PKIX_OUTOFMEMORY; goto cleanup; }
;
236 }
237
238 while (*extensions) {
239
240 extension = *extensions++;
241
242 PKIX_NULLCHECK_ONE(extension)do { if ((extension) == ((void*)0)){ stdVars.aPkixErrorReceived
= ((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT
; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean
) 1), plContext);; } } while (0)
;
243
244 PKIX_CRLENTRY_DEBUG("\t\tCalling PORT_ArenaZNew\n");
245 derBytes = PORT_ArenaZNew(arena, SECItem)(SECItem *)PORT_ArenaZAlloc_Util(arena, sizeof(SECItem));
246 if (derBytes == NULL((void*)0)) {
247 PKIX_ERROR(PKIX_PORTARENAALLOCFAILED){ { if (pkixLoggersErrors) { pkix_Logger_CheckWithCode(pkixLoggersErrors
, PKIX_PORTARENAALLOCFAILED, ((void*)0), stdVars.aPkixType, 2
, plContext); } } stdVars.aPkixErrorReceived = ((PKIX_Boolean
) 1); stdVars.aPkixErrorCode = PKIX_PORTARENAALLOCFAILED; goto
cleanup; }
;
248 }
249
250 PKIX_CRLENTRY_DEBUG
251 ("\t\tCalling SEC_ASN1EncodeItem\n");
252 resultSecItem = SEC_ASN1EncodeItemSEC_ASN1EncodeItem_Util
253 (arena,
254 derBytes,
255 extension,
256 CERT_CertExtensionTemplate);
257
258 if (resultSecItem == NULL((void*)0)){
259 PKIX_ERROR(PKIX_SECASN1ENCODEITEMFAILED){ { if (pkixLoggersErrors) { pkix_Logger_CheckWithCode(pkixLoggersErrors
, PKIX_SECASN1ENCODEITEMFAILED, ((void*)0), stdVars.aPkixType
, 2, plContext); } } stdVars.aPkixErrorReceived = ((PKIX_Boolean
) 1); stdVars.aPkixErrorCode = PKIX_SECASN1ENCODEITEMFAILED; goto
cleanup; }
;
260 }
261
262 PKIX_CHECK(pkix_hashdo { stdVars.aPkixErrorResult = (pkix_hash (derBytes->data
, derBytes->len, &extHash, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_HASHFAILED; goto cleanup; } }
while (0)
263 (derBytes->data,do { stdVars.aPkixErrorResult = (pkix_hash (derBytes->data
, derBytes->len, &extHash, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_HASHFAILED; goto cleanup; } }
while (0)
264 derBytes->len,do { stdVars.aPkixErrorResult = (pkix_hash (derBytes->data
, derBytes->len, &extHash, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_HASHFAILED; goto cleanup; } }
while (0)
265 &extHash,do { stdVars.aPkixErrorResult = (pkix_hash (derBytes->data
, derBytes->len, &extHash, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_HASHFAILED; goto cleanup; } }
while (0)
266 plContext),do { stdVars.aPkixErrorResult = (pkix_hash (derBytes->data
, derBytes->len, &extHash, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_HASHFAILED; goto cleanup; } }
while (0)
267 PKIX_HASHFAILED)do { stdVars.aPkixErrorResult = (pkix_hash (derBytes->data
, derBytes->len, &extHash, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_HASHFAILED; goto cleanup; } }
while (0)
;
268
269 hashValue += (extHash << 7);
270
271 }
272 }
273
274 *pHashValue = hashValue;
275
276cleanup:
277
278 if (arena){
279 /* Note that freeing the arena also frees derBytes */
280 PKIX_CRLENTRY_DEBUG("\t\tCalling PORT_FreeArena\n");
281 PORT_FreeArenaPORT_FreeArena_Util(arena, PR_FALSE0);
282 arena = NULL((void*)0);
283 }
284 PKIX_RETURN(CRLENTRY)return PKIX_DoReturn(&stdVars, (PKIX_CRLENTRY_ERROR), ((PKIX_Boolean
) 1), plContext);
;
285}
286
287/*
288 * FUNCTION: pkix_pl_CRLEntry_Hashcode
289 * (see comments for PKIX_PL_HashcodeCallback in pkix_pl_system.h)
290 */
291static PKIX_Error *
292pkix_pl_CRLEntry_Hashcode(
293 PKIX_PL_Object *object,
294 PKIX_UInt32 *pHashcode,
295 void *plContext)
296{
297 SECItem *nssDate = NULL((void*)0);
298 PKIX_PL_CRLEntry *crlEntry = NULL((void*)0);
299 PKIX_UInt32 crlEntryHash;
300 PKIX_UInt32 hashValue;
301 PKIX_Int32 reasonCode = 0;
302
303 PKIX_ENTER(CRLENTRY, "pkix_pl_CRLEntry_Hashcode")static const char cMyFuncName[] = {"pkix_pl_CRLEntry_Hashcode"
}; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName
; stdVars.aPkixType = PKIX_CRLENTRY_ERROR; ; do { if (pkixLoggersDebugTrace
) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName
, ">>>", stdVars.aPkixType, 5, plContext); } } while
(0);
;
304 PKIX_NULLCHECK_TWO(object, pHashcode)do { if (((object) == ((void*)0)) || ((pHashcode) == ((void*)
0))){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars
.aPkixErrorCode = PKIX_NULLARGUMENT; return PKIX_DoReturn(&
stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean) 1), plContext);;
} } while (0)
;
305
306 PKIX_CHECK(pkix_CheckType(object, PKIX_CRLENTRY_TYPE, plContext),do { stdVars.aPkixErrorResult = (pkix_CheckType(object, PKIX_CRLENTRY_TYPE
, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass
= stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_OBJECTNOTCRLENTRY; goto cleanup; } } while (0)
307 PKIX_OBJECTNOTCRLENTRY)do { stdVars.aPkixErrorResult = (pkix_CheckType(object, PKIX_CRLENTRY_TYPE
, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass
= stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_OBJECTNOTCRLENTRY; goto cleanup; } } while (0)
;
308
309 crlEntry = (PKIX_PL_CRLEntry *)object;
310
311 PKIX_NULLCHECK_ONE(crlEntry->nssCrlEntry)do { if ((crlEntry->nssCrlEntry) == ((void*)0)){ stdVars.aPkixErrorReceived
= ((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT
; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean
) 1), plContext);; } } while (0)
;
312 nssDate = &(crlEntry->nssCrlEntry->revocationDate);
313
314 PKIX_NULLCHECK_ONE(nssDate->data)do { if ((nssDate->data) == ((void*)0)){ stdVars.aPkixErrorReceived
= ((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT
; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean
) 1), plContext);; } } while (0)
;
315
316 PKIX_CHECK(pkix_hashdo { stdVars.aPkixErrorResult = (pkix_hash ((const unsigned char
*)nssDate->data, nssDate->len, &crlEntryHash, plContext
)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass =
stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_ERRORGETTINGHASHCODE; goto cleanup; } } while (0)
317 ((const unsigned char *)nssDate->data,do { stdVars.aPkixErrorResult = (pkix_hash ((const unsigned char
*)nssDate->data, nssDate->len, &crlEntryHash, plContext
)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass =
stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_ERRORGETTINGHASHCODE; goto cleanup; } } while (0)
318 nssDate->len,do { stdVars.aPkixErrorResult = (pkix_hash ((const unsigned char
*)nssDate->data, nssDate->len, &crlEntryHash, plContext
)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass =
stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_ERRORGETTINGHASHCODE; goto cleanup; } } while (0)
319 &crlEntryHash,do { stdVars.aPkixErrorResult = (pkix_hash ((const unsigned char
*)nssDate->data, nssDate->len, &crlEntryHash, plContext
)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass =
stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_ERRORGETTINGHASHCODE; goto cleanup; } } while (0)
320 plContext),do { stdVars.aPkixErrorResult = (pkix_hash ((const unsigned char
*)nssDate->data, nssDate->len, &crlEntryHash, plContext
)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass =
stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_ERRORGETTINGHASHCODE; goto cleanup; } } while (0)
321 PKIX_ERRORGETTINGHASHCODE)do { stdVars.aPkixErrorResult = (pkix_hash ((const unsigned char
*)nssDate->data, nssDate->len, &crlEntryHash, plContext
)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass =
stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_ERRORGETTINGHASHCODE; goto cleanup; } } while (0)
;
322
323 PKIX_CHECK(PKIX_PL_Object_Hashcodedo { stdVars.aPkixErrorResult = (PKIX_PL_Object_Hashcode ((PKIX_PL_Object
*)crlEntry->serialNumber, &hashValue, plContext)); if
(stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars
.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_OBJECTHASHCODEFAILED
; goto cleanup; } } while (0)
324 ((PKIX_PL_Object *)crlEntry->serialNumber,do { stdVars.aPkixErrorResult = (PKIX_PL_Object_Hashcode ((PKIX_PL_Object
*)crlEntry->serialNumber, &hashValue, plContext)); if
(stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars
.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_OBJECTHASHCODEFAILED
; goto cleanup; } } while (0)
325 &hashValue,do { stdVars.aPkixErrorResult = (PKIX_PL_Object_Hashcode ((PKIX_PL_Object
*)crlEntry->serialNumber, &hashValue, plContext)); if
(stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars
.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_OBJECTHASHCODEFAILED
; goto cleanup; } } while (0)
326 plContext),do { stdVars.aPkixErrorResult = (PKIX_PL_Object_Hashcode ((PKIX_PL_Object
*)crlEntry->serialNumber, &hashValue, plContext)); if
(stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars
.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_OBJECTHASHCODEFAILED
; goto cleanup; } } while (0)
327 PKIX_OBJECTHASHCODEFAILED)do { stdVars.aPkixErrorResult = (PKIX_PL_Object_Hashcode ((PKIX_PL_Object
*)crlEntry->serialNumber, &hashValue, plContext)); if
(stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars
.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_OBJECTHASHCODEFAILED
; goto cleanup; } } while (0)
;
328
329 crlEntryHash += (hashValue << 7);
330
331 hashValue = 0;
332
333 if (crlEntry->nssCrlEntry->extensions) {
334
335 PKIX_CHECK(pkix_pl_CRLEntry_Extensions_Hashcodedo { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_Extensions_Hashcode
(crlEntry->nssCrlEntry->extensions, &hashValue, plContext
)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass =
stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_CRLENTRYEXTENSIONSHASHCODEFAILED; goto cleanup; } } while
(0)
336 (crlEntry->nssCrlEntry->extensions, &hashValue, plContext),do { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_Extensions_Hashcode
(crlEntry->nssCrlEntry->extensions, &hashValue, plContext
)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass =
stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_CRLENTRYEXTENSIONSHASHCODEFAILED; goto cleanup; } } while
(0)
337 PKIX_CRLENTRYEXTENSIONSHASHCODEFAILED)do { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_Extensions_Hashcode
(crlEntry->nssCrlEntry->extensions, &hashValue, plContext
)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass =
stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_CRLENTRYEXTENSIONSHASHCODEFAILED; goto cleanup; } } while
(0)
;
338 }
339
340 crlEntryHash += (hashValue << 7);
341
342 PKIX_CHECK(PKIX_PL_CRLEntry_GetCRLEntryReasonCodedo { stdVars.aPkixErrorResult = (PKIX_PL_CRLEntry_GetCRLEntryReasonCode
(crlEntry, &reasonCode, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_CRLENTRYGETCRLENTRYREASONCODEFAILED
; goto cleanup; } } while (0)
343 (crlEntry, &reasonCode, plContext),do { stdVars.aPkixErrorResult = (PKIX_PL_CRLEntry_GetCRLEntryReasonCode
(crlEntry, &reasonCode, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_CRLENTRYGETCRLENTRYREASONCODEFAILED
; goto cleanup; } } while (0)
344 PKIX_CRLENTRYGETCRLENTRYREASONCODEFAILED)do { stdVars.aPkixErrorResult = (PKIX_PL_CRLEntry_GetCRLEntryReasonCode
(crlEntry, &reasonCode, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_CRLENTRYGETCRLENTRYREASONCODEFAILED
; goto cleanup; } } while (0)
;
345
346 crlEntryHash += (reasonCode + 777) << 3;
347
348 *pHashcode = crlEntryHash;
349
350cleanup:
351
352 PKIX_RETURN(CRLENTRY)return PKIX_DoReturn(&stdVars, (PKIX_CRLENTRY_ERROR), ((PKIX_Boolean
) 1), plContext);
;
353}
354
355/*
356 * FUNCTION: pkix_pl_CRLENTRY_Extensions_Equals
357 * DESCRIPTION:
358 *
359 * Compare each extension's DERbyte data in "firstExtensions" with extension
360 * in "secondExtensions" in sequential order and store the result in
361 * "pResult".
362 *
363 * PARAMETERS
364 * "firstExtensions"
365 * Address of first NSS structure CERTCertExtension to be compared.
366 * Must be non-NULL.
367 * "secondExtensions"
368 * Address of second NSS structure CERTCertExtension to be compared.
369 * Must be non-NULL.
370 * "pResult"
371 * Address where the comparison result is returned. Must be non-NULL.
372 * "plContext"
373 * Platform-specific context pointer.
374 * THREAD SAFETY:
375 * Conditionally Thread Safe
376 * Though the value of extensions once created is not supposed to change,
377 * it may be de-allocated while we are accessing it. But since we are
378 * validating the object, it is unlikely we or someone is de-allocating
379 * at the moment.
380 * RETURNS:
381 * Returns NULL if the function succeeds.
382 * Returns an OID Error if the function fails in a non-fatal way.
383 * Returns a Fatal Error if the function fails in an unrecoverable way.
384 */
385static PKIX_Error *
386pkix_pl_CRLEntry_Extensions_Equals(
387 CERTCertExtension **extensions1,
388 CERTCertExtension **extensions2,
389 PKIX_Boolean *pResult,
390 void *plContext)
391{
392 CERTCertExtension **firstExtensions;
393 CERTCertExtension **secondExtensions;
394 CERTCertExtension *firstExtension = NULL((void*)0);
395 CERTCertExtension *secondExtension = NULL((void*)0);
396 PLArenaPool *arena = NULL((void*)0);
397 PKIX_Boolean cmpResult = PKIX_FALSE((PKIX_Boolean) 0);
398 SECItem *firstDerBytes = NULL((void*)0);
399 SECItem *secondDerBytes = NULL((void*)0);
400 SECItem *firstResultSecItem = NULL((void*)0);
401 SECItem *secondResultSecItem = NULL((void*)0);
402 PKIX_UInt32 firstNumExt = 0;
403 PKIX_UInt32 secondNumExt = 0;
404 SECComparison secResult;
405
406 PKIX_ENTER(CRLENTRY, "pkix_pl_CRLEntry_Extensions_Equals")static const char cMyFuncName[] = {"pkix_pl_CRLEntry_Extensions_Equals"
}; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName
; stdVars.aPkixType = PKIX_CRLENTRY_ERROR; ; do { if (pkixLoggersDebugTrace
) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName
, ">>>", stdVars.aPkixType, 5, plContext); } } while
(0);
;
407 PKIX_NULLCHECK_THREE(extensions1, extensions2, pResult)do { if (((extensions1) == ((void*)0)) || ((extensions2) == (
(void*)0)) || ((pResult) == ((void*)0))){ stdVars.aPkixErrorReceived
= ((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT
; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean
) 1), plContext);; } } while (0)
;
408
409 firstExtensions = extensions1;
410 secondExtensions = extensions2;
411
412 if (firstExtensions) {
413 while (*firstExtensions) {
414 firstExtension = *firstExtensions++;
415 firstNumExt++;
416 }
417 }
418
419 if (secondExtensions) {
420 while (*secondExtensions) {
421 secondExtension = *secondExtensions++;
422 secondNumExt++;
423 }
424 }
425
426 if (firstNumExt != secondNumExt) {
427 *pResult = PKIX_FALSE((PKIX_Boolean) 0);
428 goto cleanup;
429 }
430
431 if (firstNumExt == 0 && secondNumExt == 0) {
432 *pResult = PKIX_TRUE((PKIX_Boolean) 1);
433 goto cleanup;
434 }
435
436 /* now have equal number, but non-zero extension items to compare */
437
438 firstExtensions = extensions1;
439 secondExtensions = extensions2;
440
441 cmpResult = PKIX_TRUE((PKIX_Boolean) 1);
442
443 PKIX_CRLENTRY_DEBUG("\t\tCalling PORT_NewArena\n");
444 arena = PORT_NewArenaPORT_NewArena_Util(DER_DEFAULT_CHUNKSIZE(2048)*2);
445 if (arena == NULL((void*)0)) {
446 PKIX_ERROR(PKIX_OUTOFMEMORY){ { if (pkixLoggersErrors) { pkix_Logger_CheckWithCode(pkixLoggersErrors
, PKIX_OUTOFMEMORY, ((void*)0), stdVars.aPkixType, 2, plContext
); } } stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars
.aPkixErrorCode = PKIX_OUTOFMEMORY; goto cleanup; }
;
447 }
448
449 while (firstNumExt--) {
450
451 firstExtension = *firstExtensions++;
452 secondExtension = *secondExtensions++;
453
454 PKIX_NULLCHECK_TWO(firstExtension, secondExtension)do { if (((firstExtension) == ((void*)0)) || ((secondExtension
) == ((void*)0))){ stdVars.aPkixErrorReceived = ((PKIX_Boolean
) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT; return PKIX_DoReturn
(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean) 1), plContext
);; } } while (0)
;
455
456 PKIX_CRLENTRY_DEBUG("\t\tCalling PORT_ArenaZNew\n");
457 firstDerBytes = PORT_ArenaZNew(arena, SECItem)(SECItem *)PORT_ArenaZAlloc_Util(arena, sizeof(SECItem));
458 if (firstDerBytes == NULL((void*)0)) {
459 PKIX_ERROR(PKIX_PORTARENAALLOCFAILED){ { if (pkixLoggersErrors) { pkix_Logger_CheckWithCode(pkixLoggersErrors
, PKIX_PORTARENAALLOCFAILED, ((void*)0), stdVars.aPkixType, 2
, plContext); } } stdVars.aPkixErrorReceived = ((PKIX_Boolean
) 1); stdVars.aPkixErrorCode = PKIX_PORTARENAALLOCFAILED; goto
cleanup; }
;
460 }
461
462 PKIX_CRLENTRY_DEBUG("\t\tCalling PORT_ArenaZNew\n");
463 secondDerBytes = PORT_ArenaZNew(arena, SECItem)(SECItem *)PORT_ArenaZAlloc_Util(arena, sizeof(SECItem));
464 if (secondDerBytes == NULL((void*)0)) {
465 PKIX_ERROR(PKIX_PORTARENAALLOCFAILED){ { if (pkixLoggersErrors) { pkix_Logger_CheckWithCode(pkixLoggersErrors
, PKIX_PORTARENAALLOCFAILED, ((void*)0), stdVars.aPkixType, 2
, plContext); } } stdVars.aPkixErrorReceived = ((PKIX_Boolean
) 1); stdVars.aPkixErrorCode = PKIX_PORTARENAALLOCFAILED; goto
cleanup; }
;
466 }
467
468 PKIX_CRLENTRY_DEBUG
469 ("\t\tCalling SEC_ASN1EncodeItem\n");
470 firstResultSecItem = SEC_ASN1EncodeItemSEC_ASN1EncodeItem_Util
471 (arena,
472 firstDerBytes,
473 firstExtension,
474 CERT_CertExtensionTemplate);
475
476 if (firstResultSecItem == NULL((void*)0)){
477 PKIX_ERROR(PKIX_SECASN1ENCODEITEMFAILED){ { if (pkixLoggersErrors) { pkix_Logger_CheckWithCode(pkixLoggersErrors
, PKIX_SECASN1ENCODEITEMFAILED, ((void*)0), stdVars.aPkixType
, 2, plContext); } } stdVars.aPkixErrorReceived = ((PKIX_Boolean
) 1); stdVars.aPkixErrorCode = PKIX_SECASN1ENCODEITEMFAILED; goto
cleanup; }
;
478 }
479
480 PKIX_CRLENTRY_DEBUG
481 ("\t\tCalling SEC_ASN1EncodeItem\n");
482 secondResultSecItem = SEC_ASN1EncodeItemSEC_ASN1EncodeItem_Util
483 (arena,
484 secondDerBytes,
485 secondExtension,
486 CERT_CertExtensionTemplate);
487
488 if (secondResultSecItem == NULL((void*)0)){
489 PKIX_ERROR(PKIX_SECASN1ENCODEITEMFAILED){ { if (pkixLoggersErrors) { pkix_Logger_CheckWithCode(pkixLoggersErrors
, PKIX_SECASN1ENCODEITEMFAILED, ((void*)0), stdVars.aPkixType
, 2, plContext); } } stdVars.aPkixErrorReceived = ((PKIX_Boolean
) 1); stdVars.aPkixErrorCode = PKIX_SECASN1ENCODEITEMFAILED; goto
cleanup; }
;
490 }
491
492 PKIX_CRLENTRY_DEBUG("\t\tCalling SECITEM_CompareItem\n");
493 secResult = SECITEM_CompareItemSECITEM_CompareItem_Util
494 (firstResultSecItem, secondResultSecItem);
495
496 if (secResult != SECEqual) {
497 cmpResult = PKIX_FALSE((PKIX_Boolean) 0);
498 break;
499 }
500
501 }
502
503 *pResult = cmpResult;
504
505cleanup:
506
507 if (arena){
508 /* Note that freeing the arena also frees derBytes */
509 PKIX_CRLENTRY_DEBUG("\t\tCalling PORT_FreeArena\n");
510 PORT_FreeArenaPORT_FreeArena_Util(arena, PR_FALSE0);
511 arena = NULL((void*)0);
512 }
513
514 PKIX_RETURN(CRLENTRY)return PKIX_DoReturn(&stdVars, (PKIX_CRLENTRY_ERROR), ((PKIX_Boolean
) 1), plContext);
;
515}
516
517/*
518 * FUNCTION: pkix_pl_CRLEntry_Equals
519 * (see comments for PKIX_PL_Equals_Callback in pkix_pl_system.h)
520 */
521static PKIX_Error *
522pkix_pl_CRLEntry_Equals(
523 PKIX_PL_Object *firstObject,
524 PKIX_PL_Object *secondObject,
525 PKIX_Boolean *pResult,
526 void *plContext)
527{
528 PKIX_PL_CRLEntry *firstCrlEntry = NULL((void*)0);
529 PKIX_PL_CRLEntry *secondCrlEntry = NULL((void*)0);
530 PKIX_UInt32 secondType;
531 PKIX_Boolean cmpResult = PKIX_FALSE((PKIX_Boolean) 0);
532
533 PKIX_ENTER(CRLENTRY, "pkix_pl_CRLEntry_Equals")static const char cMyFuncName[] = {"pkix_pl_CRLEntry_Equals"}
; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName
; stdVars.aPkixType = PKIX_CRLENTRY_ERROR; ; do { if (pkixLoggersDebugTrace
) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName
, ">>>", stdVars.aPkixType, 5, plContext); } } while
(0);
;
534 PKIX_NULLCHECK_THREE(firstObject, secondObject, pResult)do { if (((firstObject) == ((void*)0)) || ((secondObject) == (
(void*)0)) || ((pResult) == ((void*)0))){ stdVars.aPkixErrorReceived
= ((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT
; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean
) 1), plContext);; } } while (0)
;
535
536 /* test that firstObject is a CRLEntry */
537 PKIX_CHECK(pkix_CheckType(firstObject, PKIX_CRLENTRY_TYPE, plContext),do { stdVars.aPkixErrorResult = (pkix_CheckType(firstObject, PKIX_CRLENTRY_TYPE
, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass
= stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_FIRSTOBJECTNOTCRLENTRY; goto cleanup; } } while (0)
538 PKIX_FIRSTOBJECTNOTCRLENTRY)do { stdVars.aPkixErrorResult = (pkix_CheckType(firstObject, PKIX_CRLENTRY_TYPE
, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass
= stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_FIRSTOBJECTNOTCRLENTRY; goto cleanup; } } while (0)
;
539
540 firstCrlEntry = (PKIX_PL_CRLEntry *)firstObject;
541 secondCrlEntry = (PKIX_PL_CRLEntry *)secondObject;
542
543 PKIX_NULLCHECK_TWOdo { if (((firstCrlEntry->nssCrlEntry) == ((void*)0)) || (
(secondCrlEntry->nssCrlEntry) == ((void*)0))){ stdVars.aPkixErrorReceived
= ((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT
; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean
) 1), plContext);; } } while (0)
544 (firstCrlEntry->nssCrlEntry, secondCrlEntry->nssCrlEntry)do { if (((firstCrlEntry->nssCrlEntry) == ((void*)0)) || (
(secondCrlEntry->nssCrlEntry) == ((void*)0))){ stdVars.aPkixErrorReceived
= ((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT
; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean
) 1), plContext);; } } while (0)
;
545
546 /*
547 * Since we know firstObject is a CRLEntry, if both references are
548 * identical, they must be equal
549 */
550 if (firstCrlEntry == secondCrlEntry){
551 *pResult = PKIX_TRUE((PKIX_Boolean) 1);
552 goto cleanup;
553 }
554
555 /*
556 * If secondCrlEntry isn't a CRL Entry, we don't throw an error.
557 * We simply return a Boolean result of FALSE
558 */
559 *pResult = PKIX_FALSE((PKIX_Boolean) 0);
560 PKIX_CHECK(PKIX_PL_Object_GetTypedo { stdVars.aPkixErrorResult = (PKIX_PL_Object_GetType ((PKIX_PL_Object
*)secondCrlEntry, &secondType, plContext)); if (stdVars.
aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult
->errClass; stdVars.aPkixErrorCode = PKIX_COULDNOTGETTYPEOFSECONDARGUMENT
; goto cleanup; } } while (0)
561 ((PKIX_PL_Object *)secondCrlEntry, &secondType, plContext),do { stdVars.aPkixErrorResult = (PKIX_PL_Object_GetType ((PKIX_PL_Object
*)secondCrlEntry, &secondType, plContext)); if (stdVars.
aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult
->errClass; stdVars.aPkixErrorCode = PKIX_COULDNOTGETTYPEOFSECONDARGUMENT
; goto cleanup; } } while (0)
562 PKIX_COULDNOTGETTYPEOFSECONDARGUMENT)do { stdVars.aPkixErrorResult = (PKIX_PL_Object_GetType ((PKIX_PL_Object
*)secondCrlEntry, &secondType, plContext)); if (stdVars.
aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult
->errClass; stdVars.aPkixErrorCode = PKIX_COULDNOTGETTYPEOFSECONDARGUMENT
; goto cleanup; } } while (0)
;
563 if (secondType != PKIX_CRLENTRY_TYPE) goto cleanup;
564
565 /* Compare userSerialNumber */
566 PKIX_CRLENTRY_DEBUG("\t\tCalling SECITEM_CompareItem\n");
567 if (SECITEM_CompareItemSECITEM_CompareItem_Util(
568 &(((PKIX_PL_CRLEntry *)firstCrlEntry)->nssCrlEntry->serialNumber),
569 &(((PKIX_PL_CRLEntry *)secondCrlEntry)->nssCrlEntry->serialNumber))
570 != SECEqual) {
571 *pResult = PKIX_FALSE((PKIX_Boolean) 0);
572 goto cleanup;
573 }
574
575 /* Compare revocationDate */
576 PKIX_CRLENTRY_DEBUG("\t\tCalling SECITEM_CompareItem\n");
577 if (SECITEM_CompareItemSECITEM_CompareItem_Util
578 (&(((PKIX_PL_CRLEntry *)firstCrlEntry)->nssCrlEntry->
579 revocationDate),
580 &(((PKIX_PL_CRLEntry *)secondCrlEntry)->nssCrlEntry->
581 revocationDate))
582 != SECEqual) {
583 *pResult = PKIX_FALSE((PKIX_Boolean) 0);
584 goto cleanup;
585 }
586
587 /* Compare Critical Extension List */
588 PKIX_CHECK(pkix_pl_CRLEntry_Extensions_Equalsdo { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_Extensions_Equals
(firstCrlEntry->nssCrlEntry->extensions, secondCrlEntry
->nssCrlEntry->extensions, &cmpResult, plContext));
if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars
.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_CRLENTRYEXTENSIONSEQUALSFAILED
; goto cleanup; } } while (0)
589 (firstCrlEntry->nssCrlEntry->extensions,do { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_Extensions_Equals
(firstCrlEntry->nssCrlEntry->extensions, secondCrlEntry
->nssCrlEntry->extensions, &cmpResult, plContext));
if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars
.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_CRLENTRYEXTENSIONSEQUALSFAILED
; goto cleanup; } } while (0)
590 secondCrlEntry->nssCrlEntry->extensions,do { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_Extensions_Equals
(firstCrlEntry->nssCrlEntry->extensions, secondCrlEntry
->nssCrlEntry->extensions, &cmpResult, plContext));
if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars
.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_CRLENTRYEXTENSIONSEQUALSFAILED
; goto cleanup; } } while (0)
591 &cmpResult,do { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_Extensions_Equals
(firstCrlEntry->nssCrlEntry->extensions, secondCrlEntry
->nssCrlEntry->extensions, &cmpResult, plContext));
if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars
.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_CRLENTRYEXTENSIONSEQUALSFAILED
; goto cleanup; } } while (0)
592 plContext),do { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_Extensions_Equals
(firstCrlEntry->nssCrlEntry->extensions, secondCrlEntry
->nssCrlEntry->extensions, &cmpResult, plContext));
if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars
.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_CRLENTRYEXTENSIONSEQUALSFAILED
; goto cleanup; } } while (0)
593 PKIX_CRLENTRYEXTENSIONSEQUALSFAILED)do { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_Extensions_Equals
(firstCrlEntry->nssCrlEntry->extensions, secondCrlEntry
->nssCrlEntry->extensions, &cmpResult, plContext));
if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars
.aPkixErrorResult->errClass; stdVars.aPkixErrorCode = PKIX_CRLENTRYEXTENSIONSEQUALSFAILED
; goto cleanup; } } while (0)
;
594
595 if (cmpResult != PKIX_TRUE((PKIX_Boolean) 1)){
596 *pResult = PKIX_FALSE((PKIX_Boolean) 0);
597 goto cleanup;
598 }
599
600 cmpResult = (firstCrlEntry->userReasonCode ==
601 secondCrlEntry->userReasonCode);
602
603 *pResult = cmpResult;
604
605cleanup:
606
607 PKIX_RETURN(CRLENTRY)return PKIX_DoReturn(&stdVars, (PKIX_CRLENTRY_ERROR), ((PKIX_Boolean
) 1), plContext);
;
608}
609
610/*
611 * FUNCTION: pkix_pl_CRLEntry_RegisterSelf
612 * DESCRIPTION:
613 * Registers PKIX_CRLEntry_TYPE and its related functions with systemClasses[]
614 * THREAD SAFETY:
615 * Not Thread Safe - for performance and complexity reasons
616 *
617 * Since this function is only called by PKIX_PL_Initialize, which should
618 * only be called once, it is acceptable that this function is not
619 * thread-safe.
620 */
621PKIX_Error *
622pkix_pl_CRLEntry_RegisterSelf(void *plContext)
623{
624
625 extern pkix_ClassTable_Entry systemClasses[PKIX_NUMTYPES];
626 pkix_ClassTable_Entry entry;
627
628 PKIX_ENTER(CRLENTRY, "pkix_pl_CRLEntry_RegisterSelf")static const char cMyFuncName[] = {"pkix_pl_CRLEntry_RegisterSelf"
}; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName
; stdVars.aPkixType = PKIX_CRLENTRY_ERROR; ; do { if (pkixLoggersDebugTrace
) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName
, ">>>", stdVars.aPkixType, 5, plContext); } } while
(0);
;
629
630 entry.description = "CRLEntry";
631 entry.objCounter = 0;
632 entry.typeObjectSize = sizeof(PKIX_PL_CRLEntry);
633 entry.destructor = pkix_pl_CRLEntry_Destroy;
634 entry.equalsFunction = pkix_pl_CRLEntry_Equals;
635 entry.hashcodeFunction = pkix_pl_CRLEntry_Hashcode;
636 entry.toStringFunction = pkix_pl_CRLEntry_ToString;
637 entry.comparator = NULL((void*)0);
638 entry.duplicateFunction = pkix_duplicateImmutable;
639
640 systemClasses[PKIX_CRLENTRY_TYPE] = entry;
641
642 PKIX_RETURN(CRLENTRY)return PKIX_DoReturn(&stdVars, (PKIX_CRLENTRY_ERROR), ((PKIX_Boolean
) 1), plContext);
;
643}
644
645/*
646 * FUNCTION: pkix_pl_CRLEntry_CreateEntry
647 * DESCRIPTION:
648 *
649 * Creates a new CRLEntry using the CertCrlEntry pointed to by "nssCrlEntry"
650 * and stores it at "pCrlEntry". Once created, a CRLEntry is immutable.
651 *
652 * revokedCertificates SEQUENCE OF SEQUENCE {
653 * userCertificate CertificateSerialNumber,
654 * revocationDate Time,
655 * crlEntryExtensions Extensions OPTIONAL
656 * -- if present, MUST be v2
657 *
658 * PARAMETERS:
659 * "nssCrlEntry"
660 * Address of CERTCrlEntry representing an NSS CRL entry.
661 * Must be non-NULL.
662 * "pCrlEntry"
663 * Address where object pointer will be stored. Must be non-NULL.
664 * "plContext"
665 * Platform-specific context pointer.
666 * THREAD SAFETY:
667 * Thread Safe (see Thread Safety Definitions in Programmer's Guide)
668 * RETURNS:
669 * Returns NULL if the function succeeds.
670 * Returns a CRLEntry Error if the function fails in a non-fatal way.
671 * Returns a Fatal Error if the function fails in an unrecoverable way.
672 */
673static PKIX_Error *
674pkix_pl_CRLEntry_CreateEntry(
675 CERTCrlEntry *nssCrlEntry, /* entry data to be created from */
676 PKIX_PL_CRLEntry **pCrlEntry,
677 void *plContext)
678{
679 PKIX_PL_CRLEntry *crlEntry = NULL((void*)0);
680
681 PKIX_ENTER(CRLENTRY, "pkix_pl_CRLEntry_CreateEntry")static const char cMyFuncName[] = {"pkix_pl_CRLEntry_CreateEntry"
}; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName
; stdVars.aPkixType = PKIX_CRLENTRY_ERROR; ; do { if (pkixLoggersDebugTrace
) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName
, ">>>", stdVars.aPkixType, 5, plContext); } } while
(0);
;
15
Assuming 'pkixLoggersDebugTrace' is null
16
Taking false branch
682 PKIX_NULLCHECK_TWO(nssCrlEntry, pCrlEntry)do { if (((nssCrlEntry) == ((void*)0)) || ((pCrlEntry) == ((void
*)0))){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars
.aPkixErrorCode = PKIX_NULLARGUMENT; return PKIX_DoReturn(&
stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean) 1), plContext);;
} } while (0)
;
17
Loop condition is false. Exiting loop
18
Taking false branch
19
Loop condition is false. Exiting loop
683
684 PKIX_CHECK(PKIX_PL_Object_Allocdo { stdVars.aPkixErrorResult = (PKIX_PL_Object_Alloc (PKIX_CRLENTRY_TYPE
, sizeof (PKIX_PL_CRLEntry), (PKIX_PL_Object **)&crlEntry
, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass
= stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_COULDNOTCREATECRLENTRYOBJECT; goto cleanup; } } while
(0)
20
Assuming field 'aPkixErrorResult' is non-null
21
Taking true branch
22
Control jumps to line 701
685 (PKIX_CRLENTRY_TYPE,do { stdVars.aPkixErrorResult = (PKIX_PL_Object_Alloc (PKIX_CRLENTRY_TYPE
, sizeof (PKIX_PL_CRLEntry), (PKIX_PL_Object **)&crlEntry
, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass
= stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_COULDNOTCREATECRLENTRYOBJECT; goto cleanup; } } while
(0)
686 sizeof (PKIX_PL_CRLEntry),do { stdVars.aPkixErrorResult = (PKIX_PL_Object_Alloc (PKIX_CRLENTRY_TYPE
, sizeof (PKIX_PL_CRLEntry), (PKIX_PL_Object **)&crlEntry
, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass
= stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_COULDNOTCREATECRLENTRYOBJECT; goto cleanup; } } while
(0)
687 (PKIX_PL_Object **)&crlEntry,do { stdVars.aPkixErrorResult = (PKIX_PL_Object_Alloc (PKIX_CRLENTRY_TYPE
, sizeof (PKIX_PL_CRLEntry), (PKIX_PL_Object **)&crlEntry
, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass
= stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_COULDNOTCREATECRLENTRYOBJECT; goto cleanup; } } while
(0)
688 plContext),do { stdVars.aPkixErrorResult = (PKIX_PL_Object_Alloc (PKIX_CRLENTRY_TYPE
, sizeof (PKIX_PL_CRLEntry), (PKIX_PL_Object **)&crlEntry
, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass
= stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_COULDNOTCREATECRLENTRYOBJECT; goto cleanup; } } while
(0)
689 PKIX_COULDNOTCREATECRLENTRYOBJECT)do { stdVars.aPkixErrorResult = (PKIX_PL_Object_Alloc (PKIX_CRLENTRY_TYPE
, sizeof (PKIX_PL_CRLEntry), (PKIX_PL_Object **)&crlEntry
, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass
= stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_COULDNOTCREATECRLENTRYOBJECT; goto cleanup; } } while
(0)
;
690
691 crlEntry->nssCrlEntry = nssCrlEntry;
692 crlEntry->serialNumber = NULL((void*)0);
693 crlEntry->critExtOids = NULL((void*)0);
694 crlEntry->userReasonCode = 0;
695 crlEntry->userReasonCodeAbsent = PKIX_FALSE((PKIX_Boolean) 0);
696
697 *pCrlEntry = crlEntry;
698
699cleanup:
700
701 PKIX_RETURN(CRLENTRY)return PKIX_DoReturn(&stdVars, (PKIX_CRLENTRY_ERROR), ((PKIX_Boolean
) 1), plContext);
;
23
Returning without writing to '*pCrlEntry'
24
Returning pointer, which participates in a condition later
702}
703
704/*
705 * FUNCTION: pkix_pl_CRLEntry_Create
706 * DESCRIPTION:
707 *
708 * Creates a List of CRLEntries using the array of CERTCrlEntries pointed to
709 * by "nssCrlEntries" and stores it at "pCrlEntryList". If "nssCrlEntries" is
710 * NULL, this function stores an empty List at "pCrlEntryList".
711 * }
712 * PARAMETERS:
713 * "nssCrlEntries"
714 * Address of array of CERTCrlEntries representing NSS CRL entries.
715 * Can be NULL if CRL has no NSS CRL entries.
716 * "pCrlEntryList"
717 * Address where object pointer will be stored. Must be non-NULL.
718 * "plContext"
719 * Platform-specific context pointer.
720 * THREAD SAFETY:
721 * Thread Safe (see Thread Safety Definitions in Programmer's Guide)
722 * RETURNS:
723 * Returns NULL if the function succeeds.
724 * Returns a CRLEntry Error if the function fails in a non-fatal way.
725 * Returns a Fatal Error if the function fails in an unrecoverable way.
726 */
727PKIX_Error *
728pkix_pl_CRLEntry_Create(
729 CERTCrlEntry **nssCrlEntries, /* head of entry list */
730 PKIX_List **pCrlEntryList,
731 void *plContext)
732{
733 PKIX_List *entryList = NULL((void*)0);
734 PKIX_PL_CRLEntry *crlEntry = NULL((void*)0);
1
'crlEntry' initialized to a null pointer value
735 CERTCrlEntry **entries = NULL((void*)0);
736 SECItem serialNumberItem;
737 PKIX_PL_BigInt *serialNumber;
738 char *bytes = NULL((void*)0);
739 PKIX_UInt32 length;
740
741 PKIX_ENTER(CRLENTRY, "pkix_pl_CRLEntry_Create")static const char cMyFuncName[] = {"pkix_pl_CRLEntry_Create"}
; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName
; stdVars.aPkixType = PKIX_CRLENTRY_ERROR; ; do { if (pkixLoggersDebugTrace
) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName
, ">>>", stdVars.aPkixType, 5, plContext); } } while
(0);
;
2
Assuming 'pkixLoggersDebugTrace' is null
3
Taking false branch
4
Loop condition is false. Exiting loop
742 PKIX_NULLCHECK_ONE(pCrlEntryList)do { if ((pCrlEntryList) == ((void*)0)){ stdVars.aPkixErrorReceived
= ((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT
; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean
) 1), plContext);; } } while (0)
;
5
Assuming 'pCrlEntryList' is not equal to null
6
Taking false branch
7
Loop condition is false. Exiting loop
743
744 entries = nssCrlEntries;
745
746 PKIX_CHECK(PKIX_List_Create(&entryList, plContext),do { stdVars.aPkixErrorResult = (PKIX_List_Create(&entryList
, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass
= stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_LISTCREATEFAILED; goto cleanup; } } while (0)
8
Assuming field 'aPkixErrorResult' is null
9
Taking false branch
10
Loop condition is false. Exiting loop
747 PKIX_LISTCREATEFAILED)do { stdVars.aPkixErrorResult = (PKIX_List_Create(&entryList
, plContext)); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass
= stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= PKIX_LISTCREATEFAILED; goto cleanup; } } while (0)
;
748
749 if (entries) {
11
Assuming 'entries' is non-null
12
Taking true branch
750 while (*entries){
13
Loop condition is true. Entering loop body
751 PKIX_CHECK(pkix_pl_CRLEntry_CreateEntrydo { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_CreateEntry
(*entries, &crlEntry, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_COULDNOTCREATECRLENTRYOBJECT;
goto cleanup; } } while (0)
14
Calling 'pkix_pl_CRLEntry_CreateEntry'
25
Returning from 'pkix_pl_CRLEntry_CreateEntry'
26
Assuming field 'aPkixErrorResult' is null
27
Taking false branch
28
Loop condition is false. Exiting loop
752 (*entries, &crlEntry, plContext),do { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_CreateEntry
(*entries, &crlEntry, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_COULDNOTCREATECRLENTRYOBJECT;
goto cleanup; } } while (0)
753 PKIX_COULDNOTCREATECRLENTRYOBJECT)do { stdVars.aPkixErrorResult = (pkix_pl_CRLEntry_CreateEntry
(*entries, &crlEntry, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_COULDNOTCREATECRLENTRYOBJECT;
goto cleanup; } } while (0)
;
754
755 /* Get Serial Number */
756 serialNumberItem = (*entries)->serialNumber;
757 length = serialNumberItem.len;
758 bytes = (char *)serialNumberItem.data;
759
760 PKIX_CHECK(pkix_pl_BigInt_CreateWithBytesdo { stdVars.aPkixErrorResult = (pkix_pl_BigInt_CreateWithBytes
(bytes, length, &serialNumber, plContext)); if (stdVars.
aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult
->errClass; stdVars.aPkixErrorCode = PKIX_BIGINTCREATEWITHBYTESFAILED
; goto cleanup; } } while (0)
29
Assuming field 'aPkixErrorResult' is null
30
Taking false branch
31
Loop condition is false. Exiting loop
761 (bytes, length, &serialNumber, plContext),do { stdVars.aPkixErrorResult = (pkix_pl_BigInt_CreateWithBytes
(bytes, length, &serialNumber, plContext)); if (stdVars.
aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult
->errClass; stdVars.aPkixErrorCode = PKIX_BIGINTCREATEWITHBYTESFAILED
; goto cleanup; } } while (0)
762 PKIX_BIGINTCREATEWITHBYTESFAILED)do { stdVars.aPkixErrorResult = (pkix_pl_BigInt_CreateWithBytes
(bytes, length, &serialNumber, plContext)); if (stdVars.
aPkixErrorResult) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult
->errClass; stdVars.aPkixErrorCode = PKIX_BIGINTCREATEWITHBYTESFAILED
; goto cleanup; } } while (0)
;
763
764 crlEntry->serialNumber = serialNumber;
32
Access to field 'serialNumber' results in a dereference of a null pointer (loaded from variable 'crlEntry')
765 crlEntry->nssCrlEntry = *entries;
766
767 PKIX_CHECK(PKIX_List_AppendItemdo { stdVars.aPkixErrorResult = (PKIX_List_AppendItem (entryList
, (PKIX_PL_Object *)crlEntry, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_LISTAPPENDITEMFAILED; goto cleanup
; } } while (0)
768 (entryList, (PKIX_PL_Object *)crlEntry, plContext),do { stdVars.aPkixErrorResult = (PKIX_List_AppendItem (entryList
, (PKIX_PL_Object *)crlEntry, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_LISTAPPENDITEMFAILED; goto cleanup
; } } while (0)
769 PKIX_LISTAPPENDITEMFAILED)do { stdVars.aPkixErrorResult = (PKIX_List_AppendItem (entryList
, (PKIX_PL_Object *)crlEntry, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_LISTAPPENDITEMFAILED; goto cleanup
; } } while (0)
;
770
771 PKIX_DECREF(crlEntry)do { if (crlEntry){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef
((PKIX_PL_Object *)(crlEntry), plContext); if (stdVars.aPkixTempResult
) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult, plContext
); stdVars.aPkixTempResult = ((void*)0); } crlEntry = ((void*
)0); } } while (0)
;
772
773 entries++;
774 }
775 }
776
777 *pCrlEntryList = entryList;
778
779cleanup:
780 PKIX_DECREF(crlEntry)do { if (crlEntry){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef
((PKIX_PL_Object *)(crlEntry), plContext); if (stdVars.aPkixTempResult
) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult, plContext
); stdVars.aPkixTempResult = ((void*)0); } crlEntry = ((void*
)0); } } while (0)
;
781
782 if (PKIX_ERROR_RECEIVED(stdVars.aPkixErrorReceived || stdVars.aPkixErrorResult || stdVars
.aPkixTempErrorReceived || stdVars.aPkixErrorList)
){
783 PKIX_DECREF(entryList)do { if (entryList){ stdVars.aPkixTempResult = PKIX_PL_Object_DecRef
((PKIX_PL_Object *)(entryList), plContext); if (stdVars.aPkixTempResult
) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult, plContext
); stdVars.aPkixTempResult = ((void*)0); } entryList = ((void
*)0); } } while (0)
;
784 }
785
786 PKIX_RETURN(CRLENTRY)return PKIX_DoReturn(&stdVars, (PKIX_CRLENTRY_ERROR), ((PKIX_Boolean
) 1), plContext);
;
787}
788
789/* --Public-CRLENTRY-Functions------------------------------------- */
790
791/*
792 * FUNCTION: PKIX_PL_CRLEntry_GetCRLEntryReasonCode
793 * (see comments in pkix_pl_pki.h)
794 */
795PKIX_Error *
796PKIX_PL_CRLEntry_GetCRLEntryReasonCode (
797 PKIX_PL_CRLEntry *crlEntry,
798 PKIX_Int32 *pReason,
799 void *plContext)
800{
801 SECStatus status;
802 CERTCRLEntryReasonCode nssReasonCode;
803
804 PKIX_ENTER(CRLENTRY, "PKIX_PL_CRLEntry_GetCRLEntryReasonCode")static const char cMyFuncName[] = {"PKIX_PL_CRLEntry_GetCRLEntryReasonCode"
}; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName
; stdVars.aPkixType = PKIX_CRLENTRY_ERROR; ; do { if (pkixLoggersDebugTrace
) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName
, ">>>", stdVars.aPkixType, 5, plContext); } } while
(0);
;
805 PKIX_NULLCHECK_TWO(crlEntry, pReason)do { if (((crlEntry) == ((void*)0)) || ((pReason) == ((void*)
0))){ stdVars.aPkixErrorReceived = ((PKIX_Boolean) 1); stdVars
.aPkixErrorCode = PKIX_NULLARGUMENT; return PKIX_DoReturn(&
stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean) 1), plContext);;
} } while (0)
;
806
807 if (!crlEntry->userReasonCodeAbsent && crlEntry->userReasonCode == 0) {
808
809 PKIX_OBJECT_LOCK(crlEntry)do { if (crlEntry) { stdVars.aPkixTempResult = PKIX_PL_Object_Lock
((PKIX_PL_Object*)(crlEntry), plContext); if (stdVars.aPkixTempResult
) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult, plContext
); stdVars.aPkixTempResult = ((void*)0); stdVars.aPkixErrorCode
= PKIX_OBJECTLOCKFAILED; goto cleanup; } stdVars.aLockedObject
= (PKIX_PL_Object *)(crlEntry); } } while (0)
;
810
811 if (!crlEntry->userReasonCodeAbsent &&
812 crlEntry->userReasonCode == 0) {
813
814 /* reason code has not been cached in */
815 PKIX_CRLENTRY_DEBUG("\t\tCERT_FindCRLEntryReasonExten.\n");
816 status = CERT_FindCRLEntryReasonExten
817 (crlEntry->nssCrlEntry, &nssReasonCode);
818
819 if (status == SECSuccess) {
820 crlEntry->userReasonCode = (PKIX_Int32) nssReasonCode;
821 } else {
822 crlEntry->userReasonCodeAbsent = PKIX_TRUE((PKIX_Boolean) 1);
823 }
824 }
825
826 PKIX_OBJECT_UNLOCK(crlEntry)do { if (crlEntry && stdVars.aLockedObject == (PKIX_PL_Object
*)(crlEntry)){ stdVars.aPkixTempResult = PKIX_PL_Object_Unlock
((PKIX_PL_Object *)(crlEntry), plContext); if (stdVars.aPkixTempResult
) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult, plContext
); stdVars.aPkixTempResult = ((void*)0); } stdVars.aLockedObject
= ((void*)0); } else { ((stdVars.aLockedObject == ((void*)0)
)?((void)0):PR_Assert("lockedObject == NULL","pkix_pl_crlentry.c"
,826)); } } while (0)
;
827
828 }
829
830 *pReason = crlEntry->userReasonCode;
831
832cleanup:
833
834 PKIX_RETURN(CRLENTRY)return PKIX_DoReturn(&stdVars, (PKIX_CRLENTRY_ERROR), ((PKIX_Boolean
) 1), plContext);
;
835}
836
837/*
838 * FUNCTION: PKIX_PL_CRLEntry_GetCriticalExtensionOIDs
839 * (see comments in pkix_pl_pki.h)
840 */
841PKIX_Error *
842PKIX_PL_CRLEntry_GetCriticalExtensionOIDs (
843 PKIX_PL_CRLEntry *crlEntry,
844 PKIX_List **pList, /* list of PKIX_PL_OID */
845 void *plContext)
846{
847 PKIX_List *oidsList = NULL((void*)0);
848 CERTCertExtension **extensions;
849
850 PKIX_ENTER(CRLENTRY, "PKIX_PL_CRLEntry_GetCriticalExtensionOIDs")static const char cMyFuncName[] = {"PKIX_PL_CRLEntry_GetCriticalExtensionOIDs"
}; PKIX_StdVars stdVars = zeroStdVars; stdVars.aMyFuncName = cMyFuncName
; stdVars.aPkixType = PKIX_CRLENTRY_ERROR; ; do { if (pkixLoggersDebugTrace
) { pkix_Logger_Check(pkixLoggersDebugTrace, stdVars.aMyFuncName
, ">>>", stdVars.aPkixType, 5, plContext); } } while
(0);
;
851 PKIX_NULLCHECK_THREE(crlEntry, crlEntry->nssCrlEntry, pList)do { if (((crlEntry) == ((void*)0)) || ((crlEntry->nssCrlEntry
) == ((void*)0)) || ((pList) == ((void*)0))){ stdVars.aPkixErrorReceived
= ((PKIX_Boolean) 1); stdVars.aPkixErrorCode = PKIX_NULLARGUMENT
; return PKIX_DoReturn(&stdVars, (PKIX_FATAL_ERROR), ((PKIX_Boolean
) 1), plContext);; } } while (0)
;
852
853 /* if we don't have a cached copy from before, we create one */
854 if (crlEntry->critExtOids == NULL((void*)0)) {
855
856 PKIX_OBJECT_LOCK(crlEntry)do { if (crlEntry) { stdVars.aPkixTempResult = PKIX_PL_Object_Lock
((PKIX_PL_Object*)(crlEntry), plContext); if (stdVars.aPkixTempResult
) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult, plContext
); stdVars.aPkixTempResult = ((void*)0); stdVars.aPkixErrorCode
= PKIX_OBJECTLOCKFAILED; goto cleanup; } stdVars.aLockedObject
= (PKIX_PL_Object *)(crlEntry); } } while (0)
;
857
858 if (crlEntry->critExtOids == NULL((void*)0)) {
859
860 extensions = crlEntry->nssCrlEntry->extensions;
861
862 PKIX_CHECK(pkix_pl_OID_GetCriticalExtensionOIDsdo { stdVars.aPkixErrorResult = (pkix_pl_OID_GetCriticalExtensionOIDs
(extensions, &oidsList, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_GETCRITICALEXTENSIONOIDSFAILED
; goto cleanup; } } while (0)
863 (extensions, &oidsList, plContext),do { stdVars.aPkixErrorResult = (pkix_pl_OID_GetCriticalExtensionOIDs
(extensions, &oidsList, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_GETCRITICALEXTENSIONOIDSFAILED
; goto cleanup; } } while (0)
864 PKIX_GETCRITICALEXTENSIONOIDSFAILED)do { stdVars.aPkixErrorResult = (pkix_pl_OID_GetCriticalExtensionOIDs
(extensions, &oidsList, plContext)); if (stdVars.aPkixErrorResult
) { stdVars.aPkixErrorClass = stdVars.aPkixErrorResult->errClass
; stdVars.aPkixErrorCode = PKIX_GETCRITICALEXTENSIONOIDSFAILED
; goto cleanup; } } while (0)
;
865
866 crlEntry->critExtOids = oidsList;
867 }
868
869 PKIX_OBJECT_UNLOCK(crlEntry)do { if (crlEntry && stdVars.aLockedObject == (PKIX_PL_Object
*)(crlEntry)){ stdVars.aPkixTempResult = PKIX_PL_Object_Unlock
((PKIX_PL_Object *)(crlEntry), plContext); if (stdVars.aPkixTempResult
) { PKIX_DoAddError(&stdVars, stdVars.aPkixTempResult, plContext
); stdVars.aPkixTempResult = ((void*)0); } stdVars.aLockedObject
= ((void*)0); } else { ((stdVars.aLockedObject == ((void*)0)
)?((void)0):PR_Assert("lockedObject == NULL","pkix_pl_crlentry.c"
,869)); } } while (0)
;
870
871 }
872
873 /* We should return a copy of the List since this list changes */
874 PKIX_DUPLICATE(crlEntry->critExtOids, pList, plContext,do { if ((crlEntry->critExtOids) != ((void*)0)) { do { stdVars
.aPkixErrorResult = (PKIX_PL_Object_Duplicate ((PKIX_PL_Object
*)(crlEntry->critExtOids), (PKIX_PL_Object **)(pList), (plContext
))); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass =
stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= (PKIX_OBJECTDUPLICATELISTFAILED); goto cleanup; } } while (
0); } else { *(pList) = (crlEntry->critExtOids); } } while
(0)
875 PKIX_OBJECTDUPLICATELISTFAILED)do { if ((crlEntry->critExtOids) != ((void*)0)) { do { stdVars
.aPkixErrorResult = (PKIX_PL_Object_Duplicate ((PKIX_PL_Object
*)(crlEntry->critExtOids), (PKIX_PL_Object **)(pList), (plContext
))); if (stdVars.aPkixErrorResult) { stdVars.aPkixErrorClass =
stdVars.aPkixErrorResult->errClass; stdVars.aPkixErrorCode
= (PKIX_OBJECTDUPLICATELISTFAILED); goto cleanup; } } while (
0); } else { *(pList) = (crlEntry->critExtOids); } } while
(0)
;
876
877cleanup:
878
879 PKIX_RETURN(CRLENTRY)return PKIX_DoReturn(&stdVars, (PKIX_CRLENTRY_ERROR), ((PKIX_Boolean
) 1), plContext);
;
880}