Index: nss/mozilla/security/nss/lib/libpkix/pkix/results/pkix_valresult.c |
=================================================================== |
--- nss/mozilla/security/nss/lib/libpkix/pkix/results/pkix_valresult.c (revision 142244) |
+++ nss/mozilla/security/nss/lib/libpkix/pkix/results/pkix_valresult.c (working copy) |
@@ -89,6 +89,8 @@ |
PKIX_Boolean cmpResult; |
PKIX_ValidateResult *firstValResult = NULL; |
PKIX_ValidateResult *secondValResult = NULL; |
+ PKIX_TrustAnchor *firstAnchor = NULL; |
+ PKIX_TrustAnchor *secondAnchor = NULL; |
PKIX_PolicyNode *firstTree = NULL; |
PKIX_PolicyNode *secondTree = NULL; |
@@ -117,13 +119,20 @@ |
if (!cmpResult) goto cleanup; |
- PKIX_CHECK(PKIX_PL_Object_Equals |
- ((PKIX_PL_Object *)firstValResult->anchor, |
- (PKIX_PL_Object *)secondValResult->anchor, |
- &cmpResult, |
- plContext), |
- PKIX_OBJECTEQUALSFAILED); |
+ firstAnchor = firstValResult->anchor; |
+ secondAnchor = secondValResult->anchor; |
+ if ((firstAnchor != NULL) && (secondAnchor != NULL)) { |
+ PKIX_CHECK(PKIX_PL_Object_Equals |
+ ((PKIX_PL_Object *)firstAnchor, |
+ (PKIX_PL_Object *)secondAnchor, |
+ &cmpResult, |
+ plContext), |
+ PKIX_OBJECTEQUALSFAILED); |
+ } else { |
+ cmpResult = (firstAnchor == secondAnchor); |
+ } |
+ |
if (!cmpResult) goto cleanup; |
firstTree = firstValResult->policyTree; |
@@ -137,17 +146,9 @@ |
plContext), |
PKIX_OBJECTEQUALSFAILED); |
} else { |
- if (PKIX_EXACTLY_ONE_NULL(firstTree, secondTree)) { |
- cmpResult = PKIX_FALSE; |
- } |
+ cmpResult = (firstTree == secondTree); |
} |
- /* |
- * The remaining case is that both are null, |
- * which we consider equality. |
- * cmpResult = PKIX_TRUE; |
- */ |
- |
*pResult = cmpResult; |
cleanup: |
@@ -170,7 +171,6 @@ |
PKIX_UInt32 pubKeyHash = 0; |
PKIX_UInt32 anchorHash = 0; |
PKIX_UInt32 policyTreeHash = 0; |
- PKIX_PolicyNode *policyTree = NULL; |
PKIX_ENTER(VALIDATERESULT, "pkix_ValidateResult_Hashcode"); |
PKIX_NULLCHECK_TWO(object, pHashcode); |
@@ -184,12 +184,15 @@ |
((PKIX_PL_Object *)valResult->pubKey, &pubKeyHash, plContext), |
PKIX_OBJECTHASHCODEFAILED); |
- PKIX_CHECK(PKIX_PL_Object_Hashcode |
- ((PKIX_PL_Object *)valResult->anchor, &anchorHash, plContext), |
- PKIX_OBJECTHASHCODEFAILED); |
+ if (valResult->anchor) { |
+ PKIX_CHECK(PKIX_PL_Object_Hashcode |
+ ((PKIX_PL_Object *)valResult->anchor, |
+ &anchorHash, |
+ plContext), |
+ PKIX_OBJECTHASHCODEFAILED); |
+ } |
- policyTree = valResult->policyTree; |
- if (policyTree) { |
+ if (valResult->policyTree) { |
PKIX_CHECK(PKIX_PL_Object_Hashcode |
((PKIX_PL_Object *)valResult->policyTree, |
&policyTreeHash, |
@@ -241,27 +244,35 @@ |
PKIX_CHECK(pkix_CheckType(object, PKIX_VALIDATERESULT_TYPE, plContext), |
PKIX_OBJECTNOTVALIDATERESULT); |
+ PKIX_CHECK(PKIX_PL_String_Create |
+ (PKIX_ESCASCII, asciiFormat, 0, &formatString, plContext), |
+ PKIX_STRINGCREATEFAILED); |
+ |
valResult = (PKIX_ValidateResult*)object; |
anchor = valResult->anchor; |
- PKIX_CHECK(PKIX_PL_String_Create |
- (PKIX_ESCASCII, asciiFormat, 0, &formatString, plContext), |
- PKIX_STRINGCREATEFAILED); |
+ if (anchor) { |
+ PKIX_CHECK(PKIX_PL_Object_ToString |
+ ((PKIX_PL_Object *)anchor, &anchorString, plContext), |
+ PKIX_OBJECTTOSTRINGFAILED); |
+ } else { |
+ PKIX_CHECK(PKIX_PL_String_Create |
+ (PKIX_ESCASCII, |
+ asciiNullString, |
+ 0, |
+ &anchorString, |
+ plContext), |
+ PKIX_STRINGCREATEFAILED); |
+ } |
- PKIX_CHECK(PKIX_PL_Object_ToString |
- ((PKIX_PL_Object *)anchor, &anchorString, plContext), |
- PKIX_OBJECTTOSTRINGFAILED); |
- |
pubKey = valResult->pubKey; |
PKIX_CHECK(PKIX_PL_Object_ToString |
((PKIX_PL_Object *)pubKey, &pubKeyString, plContext), |
PKIX_OBJECTTOSTRINGFAILED); |
- PKIX_CHECK(PKIX_ValidateResult_GetPolicyTree |
- (valResult, &policyTree, plContext), |
- PKIX_VALIDATERESULTGETPOLICYTREEFAILED); |
+ policyTree = valResult->policyTree; |
if (policyTree) { |
PKIX_CHECK(PKIX_PL_Object_ToString |
@@ -293,7 +304,6 @@ |
PKIX_DECREF(formatString); |
PKIX_DECREF(anchorString); |
PKIX_DECREF(pubKeyString); |
- PKIX_DECREF(policyTree); |
PKIX_DECREF(treeString); |
PKIX_RETURN(VALIDATERESULT); |
@@ -347,7 +357,7 @@ |
* "pubKey" |
* PublicKey of the desired ValidateResult. Must be non-NULL. |
* "anchor" |
- * TrustAnchor of the desired Validateresult. Must be non-NULL. |
+ * TrustAnchor of the desired Validateresult. May be NULL. |
* "policyTree" |
* PolicyNode of the desired ValidateResult; may be NULL |
* "pResult" |
@@ -371,7 +381,7 @@ |
PKIX_ValidateResult *result = NULL; |
PKIX_ENTER(VALIDATERESULT, "pkix_ValidateResult_Create"); |
- PKIX_NULLCHECK_THREE(pubKey, anchor, pResult); |
+ PKIX_NULLCHECK_TWO(pubKey, pResult); |
PKIX_CHECK(PKIX_PL_Object_Alloc |
(PKIX_VALIDATERESULT_TYPE, |