#12 nsd/tclcache.c:537: error: Null Dereference pointer `cPtr` last assigned on line 469 could be null and is dereferenced at line 537, column 28. nsd/tclcache.c:466:1: start of procedure NsTclCacheEvalObjCmd() 464. */ 465. 466. int ^ 467. NsTclCacheEvalObjCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const* objv) 468. { nsd/tclcache.c:469:5: 467. NsTclCacheEvalObjCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const* objv) 468. { 469. TclCache *cPtr = NULL; ^ 470. char *key = NULL; 471. Ns_Time *timeoutPtr = NULL, *expPtr = NULL; nsd/tclcache.c:470:5: 468. { 469. TclCache *cPtr = NULL; 470. char *key = NULL; ^ 471. Ns_Time *timeoutPtr = NULL, *expPtr = NULL; 472. int nargs = 0, force = (int)NS_FALSE, status; nsd/tclcache.c:471:5: 469. TclCache *cPtr = NULL; 470. char *key = NULL; 471. Ns_Time *timeoutPtr = NULL, *expPtr = NULL; ^ 472. int nargs = 0, force = (int)NS_FALSE, status; 473. nsd/tclcache.c:472:5: 470. char *key = NULL; 471. Ns_Time *timeoutPtr = NULL, *expPtr = NULL; 472. int nargs = 0, force = (int)NS_FALSE, status; ^ 473. 474. Ns_ObjvSpec opts[] = { nsd/tclcache.c:474:5: 472. int nargs = 0, force = (int)NS_FALSE, status; 473. 474. Ns_ObjvSpec opts[] = { ^ 475. {"-timeout", Ns_ObjvTime, &timeoutPtr, NULL}, 476. {"-expires", Ns_ObjvTime, &expPtr, NULL}, nsd/tclcache.c:481:5: 479. {NULL, NULL, NULL, NULL} 480. }; 481. Ns_ObjvSpec args[] = { ^ 482. {"cache", ObjvCache, &cPtr, clientData}, 483. {"key", Ns_ObjvString, &key, NULL}, nsd/tclcache.c:488:9: Taking false branch 486. }; 487. 488. if (Ns_ParseObjv(opts, args, interp, 1, objc, objv) != NS_OK) { ^ 489. status = TCL_ERROR; 490. nsd/tclcache.c:491:16: Condition is false 489. status = TCL_ERROR; 490. 491. } else if (unlikely(nsconf.nocache == NS_TRUE)) { ^ 492. /*Ns_Log(Notice, "nocache: %s %d", Tcl_GetString(objv[objc-nargs]), nargs);*/ 493. status = CacheEval(interp, nargs, objc, objv); nsd/tclcache.c:491:16: Taking false branch 489. status = TCL_ERROR; 490. 491. } else if (unlikely(nsconf.nocache == NS_TRUE)) { ^ 492. /*Ns_Log(Notice, "nocache: %s %d", Tcl_GetString(objv[objc-nargs]), nargs);*/ 493. status = CacheEval(interp, nargs, objc, objv); nsd/tclcache.c:501:9: 499. int isNew; 500. 501. assert(clientData != NULL); ^ 502. assert(cPtr != NULL); 503. assert(key != NULL); nsd/tclcache.c:502:9: 500. 501. assert(clientData != NULL); 502. assert(cPtr != NULL); ^ 503. assert(key != NULL); 504. nsd/tclcache.c:503:9: 501. assert(clientData != NULL); 502. assert(cPtr != NULL); 503. assert(key != NULL); ^ 504. 505. itPtr = clientData; nsd/tclcache.c:505:9: 503. assert(key != NULL); 504. 505. itPtr = clientData; ^ 506. transactionStackPtr = &itPtr->cacheTransactionStack; 507. nsd/tclcache.c:506:9: 504. 505. itPtr = clientData; 506. transactionStackPtr = &itPtr->cacheTransactionStack; ^ 507. 508. /* nsd/tclcache.c:514:9: Skipping CreateEntry(): empty list of specs 512. * current transaction. 513. */ 514. entry = CreateEntry(itPtr, cPtr, key, &isNew, timeoutPtr, transactionStackPtr); ^ 515. 516. if (unlikely(entry == NULL)) { nsd/tclcache.c:516:13: Condition is false 514. entry = CreateEntry(itPtr, cPtr, key, &isNew, timeoutPtr, transactionStackPtr); 515. 516. if (unlikely(entry == NULL)) { ^ 517. status = TCL_ERROR; 518. nsd/tclcache.c:516:13: Taking false branch 514. entry = CreateEntry(itPtr, cPtr, key, &isNew, timeoutPtr, transactionStackPtr); 515. 516. if (unlikely(entry == NULL)) { ^ 517. status = TCL_ERROR; 518. nsd/tclcache.c:519:20: Condition is false 517. status = TCL_ERROR; 518. 519. } else if (likely(isNew == 0 && force == 0)) { ^ 520. char *value = Ns_CacheGetValueT(entry, transactionStackPtr); 521. Tcl_Obj *resultObj = Tcl_NewStringObj(value, (int)Ns_CacheGetSize(entry)); nsd/tclcache.c:519:20: Taking false branch 517. status = TCL_ERROR; 518. 519. } else if (likely(isNew == 0 && force == 0)) { ^ 520. char *value = Ns_CacheGetValueT(entry, transactionStackPtr); 521. Tcl_Obj *resultObj = Tcl_NewStringObj(value, (int)Ns_CacheGetSize(entry)); nsd/tclcache.c:537:13: 535. */ 536. 537. Ns_CacheUnlock(cPtr->cache); ^ 538. 539. Ns_GetTime(&start);