security/nss/lib/libpkix/pkix/util/pkix_errpaths.c

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     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_errpaths.c
     6  *
     7  * Error Handling Helper Functions
     8  *
     9  */
    11 #define PKIX_STDVARS_POINTER
    12 #include "pkix_error.h"
    14 const PKIX_StdVars zeroStdVars;
    16 PKIX_Error*
    17 PKIX_DoThrow(PKIX_StdVars * stdVars, PKIX_ERRORCLASS errClass, 
    18              PKIX_ERRORCODE errCode, PKIX_ERRORCLASS overrideClass,
    19              void *plContext)
    20 {
    21     if (!pkixErrorReceived && !pkixErrorResult && pkixErrorList) { 
    22         pkixTempResult = PKIX_List_GetItem(pkixErrorList, 0, 
    23                          (PKIX_PL_Object**)&pkixReturnResult,
    24                                            plContext); 
    25     } else { 
    26         pkixTempResult = (PKIX_Error*)pkix_Throw(errClass, myFuncName, errCode,
    27                                                  overrideClass, pkixErrorResult,
    28                                                  &pkixReturnResult, plContext);
    29     }
    30     if (pkixReturnResult) {
    31         if (pkixErrorResult != PKIX_ALLOC_ERROR()) {
    32             PKIX_DECREF(pkixErrorResult);
    33         }
    34         pkixTempResult = pkixReturnResult;
    35     } else if (pkixErrorResult) {
    36         if (pkixTempResult != PKIX_ALLOC_ERROR()) {
    37             PKIX_DECREF(pkixTempResult);
    38         }
    39         pkixTempResult = pkixErrorResult;
    40     }
    41     if (pkixErrorList) {
    42         PKIX_PL_Object_DecRef((PKIX_PL_Object*)pkixErrorList, plContext);
    43         pkixErrorList = NULL;
    44     }
    45     return pkixTempResult;
    46 }
    48 PKIX_Error *
    49 PKIX_DoReturn(PKIX_StdVars * stdVars, PKIX_ERRORCLASS errClass,
    50               PKIX_Boolean doLogger, void *plContext)
    51 {
    52     PKIX_OBJECT_UNLOCK(lockedObject);
    53     if (pkixErrorReceived || pkixErrorResult || pkixErrorList)
    54 	return PKIX_DoThrow(stdVars, errClass, pkixErrorCode, pkixErrorClass,
    55                              plContext);
    56     /* PKIX_DEBUG_EXIT(type); */
    57     if (doLogger)
    58 	_PKIX_DEBUG_TRACE(pkixLoggersDebugTrace, "<<<", PKIX_LOGGER_LEVEL_TRACE);
    59     return NULL;
    60 }
    62 /* PKIX_DoAddError - creates the list of received error if it does not exist
    63  * yet and adds newly received error into the list. */
    64 void
    65 PKIX_DoAddError(PKIX_StdVars *stdVars, PKIX_Error *error, void * plContext)
    66 {
    67     PKIX_List *localList = NULL;
    68     PKIX_Error *localError = NULL;
    69     PKIX_Boolean listCreated = PKIX_FALSE;
    71     if (!pkixErrorList) {
    72         localError = PKIX_List_Create(&localList, plContext);
    73         if (localError)
    74             goto cleanup;
    75         listCreated = PKIX_TRUE;
    76     } else {
    77         localList = pkixErrorList;
    78     }
    80     localError = PKIX_List_AppendItem(localList, (PKIX_PL_Object*)error,
    81                                       plContext);
    82     PORT_Assert (localError == NULL);
    83     if (localError != NULL) {
    84         if (listCreated) {
    85             /* ignore the error code of DecRef function */
    86             PKIX_PL_Object_DecRef((PKIX_PL_Object*)localList, plContext);
    87             localList = NULL;
    88         }
    89     } else {
    90         pkixErrorList = localList;
    91     }
    93 cleanup:
    95     if (localError && localError != PKIX_ALLOC_ERROR()) {
    96         PKIX_PL_Object_DecRef((PKIX_PL_Object*)localError, plContext);
    97     }
    99     if (error && error != PKIX_ALLOC_ERROR()) {
   100         PKIX_PL_Object_DecRef((PKIX_PL_Object*)error, plContext);
   101     }
   102 }

mercurial