Bug Summary

File:out/../deps/openssl/openssl/crypto/des/ncbc_enc.c
Warning:line 104, column 42
Although the value stored to 'xor1' is used in the enclosing expression, the value is never actually read from 'xor1'

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple x86_64-unknown-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name cbc_enc.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 -mrelocation-model pic -pic-level 2 -pic-is-pie -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 -fcoverage-compilation-dir=/home/maurizio/node-v18.6.0/out -resource-dir /usr/local/lib/clang/16.0.0 -D V8_DEPRECATION_WARNINGS -D V8_IMMINENT_DEPRECATION_WARNINGS -D _GLIBCXX_USE_CXX11_ABI=1 -D NODE_OPENSSL_CONF_NAME=nodejs_conf -D NODE_OPENSSL_HAS_QUIC -D __STDC_FORMAT_MACROS -D OPENSSL_NO_PINSHARED -D OPENSSL_THREADS -D OPENSSL_NO_HW -D OPENSSL_API_COMPAT=0x10100001L -D STATIC_LEGACY -D NDEBUG -D OPENSSL_USE_NODELETE -D L_ENDIAN -D OPENSSL_BUILDING_OPENSSL -D AES_ASM -D BSAES_ASM -D CMLL_ASM -D ECP_NISTZ256_ASM -D GHASH_ASM -D KECCAK1600_ASM -D MD5_ASM -D OPENSSL_BN_ASM_GF2m -D OPENSSL_BN_ASM_MONT -D OPENSSL_BN_ASM_MONT5 -D OPENSSL_CPUID_OBJ -D OPENSSL_IA32_SSE2 -D PADLOCK_ASM -D POLY1305_ASM -D SHA1_ASM -D SHA256_ASM -D SHA512_ASM -D VPAES_ASM -D WHIRLPOOL_ASM -D X25519_ASM -D OPENSSL_PIC -D MODULESDIR="/home/maurizio/node-v18.6.0/out/Release/obj.target/deps/openssl/lib/openssl-modules" -D OPENSSLDIR="/home/maurizio/node-v18.6.0/out/Release/obj.target/deps/openssl" -D OPENSSLDIR="/etc/ssl" -D ENGINESDIR="/dev/null" -D TERMIOS -I ../deps/openssl/openssl -I ../deps/openssl/openssl/include -I ../deps/openssl/openssl/crypto -I ../deps/openssl/openssl/crypto/include -I ../deps/openssl/openssl/crypto/modes -I ../deps/openssl/openssl/crypto/ec/curve448 -I ../deps/openssl/openssl/crypto/ec/curve448/arch_32 -I ../deps/openssl/openssl/providers/common/include -I ../deps/openssl/openssl/providers/implementations/include -I ../deps/openssl/config -I ../deps/openssl/config/archs/linux-x86_64/asm -I ../deps/openssl/config/archs/linux-x86_64/asm/include -I ../deps/openssl/config/archs/linux-x86_64/asm/crypto -I ../deps/openssl/config/archs/linux-x86_64/asm/crypto/include/internal -I ../deps/openssl/config/archs/linux-x86_64/asm/providers/common/include -internal-isystem /usr/local/lib/clang/16.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-redhat-linux/8/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -O3 -Wno-unused-parameter -Wno-missing-field-initializers -Wno-old-style-declaration -fdebug-compilation-dir=/home/maurizio/node-v18.6.0/out -ferror-limit 19 -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/scan-build-2022-08-22-142216-507842-1 -x c ../deps/openssl/openssl/crypto/des/cbc_enc.c
1/*
2 * Copyright 1998-2016 The OpenSSL Project Authors. All Rights Reserved.
3 *
4 * Licensed under the Apache License 2.0 (the "License"). You may not use
5 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
8 */
9
10/*-
11 * #included by:
12 * cbc_enc.c (DES_cbc_encrypt)
13 * des_enc.c (DES_ncbc_encrypt)
14 */
15
16#include "des_local.h"
17
18#ifdef CBC_ENC_C__DONT_UPDATE_IV
19void DES_cbc_encrypt(const unsigned char *in, unsigned char *out, long length,
20 DES_key_schedule *_schedule, DES_cblock *ivec, int enc)
21#else
22void DES_ncbc_encrypt(const unsigned char *in, unsigned char *out,
23 long length, DES_key_schedule *_schedule,
24 DES_cblock *ivec, int enc)
25#endif
26{
27 register DES_LONG tin0, tin1;
28 register DES_LONG tout0, tout1, xor0, xor1;
29 register long l = length;
30 DES_LONG tin[2];
31 unsigned char *iv;
32
33 iv = &(*ivec)[0];
34
35 if (enc) {
36 c2l(iv, tout0)(tout0 =((DES_LONG)(*((iv)++))) , tout0|=((DES_LONG)(*((iv)++
)))<< 8L, tout0|=((DES_LONG)(*((iv)++)))<<16L, tout0
|=((DES_LONG)(*((iv)++)))<<24L)
;
37 c2l(iv, tout1)(tout1 =((DES_LONG)(*((iv)++))) , tout1|=((DES_LONG)(*((iv)++
)))<< 8L, tout1|=((DES_LONG)(*((iv)++)))<<16L, tout1
|=((DES_LONG)(*((iv)++)))<<24L)
;
38 for (l -= 8; l >= 0; l -= 8) {
39 c2l(in, tin0)(tin0 =((DES_LONG)(*((in)++))) , tin0|=((DES_LONG)(*((in)++))
)<< 8L, tin0|=((DES_LONG)(*((in)++)))<<16L, tin0|=
((DES_LONG)(*((in)++)))<<24L)
;
40 c2l(in, tin1)(tin1 =((DES_LONG)(*((in)++))) , tin1|=((DES_LONG)(*((in)++))
)<< 8L, tin1|=((DES_LONG)(*((in)++)))<<16L, tin1|=
((DES_LONG)(*((in)++)))<<24L)
;
41 tin0 ^= tout0;
42 tin[0] = tin0;
43 tin1 ^= tout1;
44 tin[1] = tin1;
45 DES_encrypt1((DES_LONG *)tin, _schedule, DES_ENCRYPT1);
46 tout0 = tin[0];
47 l2c(tout0, out)(*((out)++)=(unsigned char)(((tout0) )&0xff), *((out)++)=
(unsigned char)(((tout0)>> 8L)&0xff), *((out)++)=(unsigned
char)(((tout0)>>16L)&0xff), *((out)++)=(unsigned char
)(((tout0)>>24L)&0xff))
;
48 tout1 = tin[1];
49 l2c(tout1, out)(*((out)++)=(unsigned char)(((tout1) )&0xff), *((out)++)=
(unsigned char)(((tout1)>> 8L)&0xff), *((out)++)=(unsigned
char)(((tout1)>>16L)&0xff), *((out)++)=(unsigned char
)(((tout1)>>24L)&0xff))
;
50 }
51 if (l != -8) {
52 c2ln(in, tin0, tin1, l + 8){ in+=l + 8; tin0=tin1=0; switch (l + 8) { case 8: tin1 =((DES_LONG
)(*(--(in))))<<24L; case 7: tin1|=((DES_LONG)(*(--(in))
))<<16L; case 6: tin1|=((DES_LONG)(*(--(in))))<< 8L
; case 5: tin1|=((DES_LONG)(*(--(in)))); case 4: tin0 =((DES_LONG
)(*(--(in))))<<24L; case 3: tin0|=((DES_LONG)(*(--(in))
))<<16L; case 2: tin0|=((DES_LONG)(*(--(in))))<< 8L
; case 1: tin0|=((DES_LONG)(*(--(in)))); } }
;
53 tin0 ^= tout0;
54 tin[0] = tin0;
55 tin1 ^= tout1;
56 tin[1] = tin1;
57 DES_encrypt1((DES_LONG *)tin, _schedule, DES_ENCRYPT1);
58 tout0 = tin[0];
59 l2c(tout0, out)(*((out)++)=(unsigned char)(((tout0) )&0xff), *((out)++)=
(unsigned char)(((tout0)>> 8L)&0xff), *((out)++)=(unsigned
char)(((tout0)>>16L)&0xff), *((out)++)=(unsigned char
)(((tout0)>>24L)&0xff))
;
60 tout1 = tin[1];
61 l2c(tout1, out)(*((out)++)=(unsigned char)(((tout1) )&0xff), *((out)++)=
(unsigned char)(((tout1)>> 8L)&0xff), *((out)++)=(unsigned
char)(((tout1)>>16L)&0xff), *((out)++)=(unsigned char
)(((tout1)>>24L)&0xff))
;
62 }
63#ifndef CBC_ENC_C__DONT_UPDATE_IV
64 iv = &(*ivec)[0];
65 l2c(tout0, iv)(*((iv)++)=(unsigned char)(((tout0) )&0xff), *((iv)++)=(unsigned
char)(((tout0)>> 8L)&0xff), *((iv)++)=(unsigned char
)(((tout0)>>16L)&0xff), *((iv)++)=(unsigned char)((
(tout0)>>24L)&0xff))
;
66 l2c(tout1, iv)(*((iv)++)=(unsigned char)(((tout1) )&0xff), *((iv)++)=(unsigned
char)(((tout1)>> 8L)&0xff), *((iv)++)=(unsigned char
)(((tout1)>>16L)&0xff), *((iv)++)=(unsigned char)((
(tout1)>>24L)&0xff))
;
67#endif
68 } else {
69 c2l(iv, xor0)(xor0 =((DES_LONG)(*((iv)++))) , xor0|=((DES_LONG)(*((iv)++))
)<< 8L, xor0|=((DES_LONG)(*((iv)++)))<<16L, xor0|=
((DES_LONG)(*((iv)++)))<<24L)
;
70 c2l(iv, xor1)(xor1 =((DES_LONG)(*((iv)++))) , xor1|=((DES_LONG)(*((iv)++))
)<< 8L, xor1|=((DES_LONG)(*((iv)++)))<<16L, xor1|=
((DES_LONG)(*((iv)++)))<<24L)
;
71 for (l -= 8; l >= 0; l -= 8) {
72 c2l(in, tin0)(tin0 =((DES_LONG)(*((in)++))) , tin0|=((DES_LONG)(*((in)++))
)<< 8L, tin0|=((DES_LONG)(*((in)++)))<<16L, tin0|=
((DES_LONG)(*((in)++)))<<24L)
;
73 tin[0] = tin0;
74 c2l(in, tin1)(tin1 =((DES_LONG)(*((in)++))) , tin1|=((DES_LONG)(*((in)++))
)<< 8L, tin1|=((DES_LONG)(*((in)++)))<<16L, tin1|=
((DES_LONG)(*((in)++)))<<24L)
;
75 tin[1] = tin1;
76 DES_encrypt1((DES_LONG *)tin, _schedule, DES_DECRYPT0);
77 tout0 = tin[0] ^ xor0;
78 tout1 = tin[1] ^ xor1;
79 l2c(tout0, out)(*((out)++)=(unsigned char)(((tout0) )&0xff), *((out)++)=
(unsigned char)(((tout0)>> 8L)&0xff), *((out)++)=(unsigned
char)(((tout0)>>16L)&0xff), *((out)++)=(unsigned char
)(((tout0)>>24L)&0xff))
;
80 l2c(tout1, out)(*((out)++)=(unsigned char)(((tout1) )&0xff), *((out)++)=
(unsigned char)(((tout1)>> 8L)&0xff), *((out)++)=(unsigned
char)(((tout1)>>16L)&0xff), *((out)++)=(unsigned char
)(((tout1)>>24L)&0xff))
;
81 xor0 = tin0;
82 xor1 = tin1;
83 }
84 if (l != -8) {
85 c2l(in, tin0)(tin0 =((DES_LONG)(*((in)++))) , tin0|=((DES_LONG)(*((in)++))
)<< 8L, tin0|=((DES_LONG)(*((in)++)))<<16L, tin0|=
((DES_LONG)(*((in)++)))<<24L)
;
86 tin[0] = tin0;
87 c2l(in, tin1)(tin1 =((DES_LONG)(*((in)++))) , tin1|=((DES_LONG)(*((in)++))
)<< 8L, tin1|=((DES_LONG)(*((in)++)))<<16L, tin1|=
((DES_LONG)(*((in)++)))<<24L)
;
88 tin[1] = tin1;
89 DES_encrypt1((DES_LONG *)tin, _schedule, DES_DECRYPT0);
90 tout0 = tin[0] ^ xor0;
91 tout1 = tin[1] ^ xor1;
92 l2cn(tout0, tout1, out, l + 8){ out+=l + 8; switch (l + 8) { case 8: *(--(out))=(unsigned char
)(((tout1)>>24L)&0xff); case 7: *(--(out))=(unsigned
char)(((tout1)>>16L)&0xff); case 6: *(--(out))=(unsigned
char)(((tout1)>> 8L)&0xff); case 5: *(--(out))=(unsigned
char)(((tout1) )&0xff); case 4: *(--(out))=(unsigned char
)(((tout0)>>24L)&0xff); case 3: *(--(out))=(unsigned
char)(((tout0)>>16L)&0xff); case 2: *(--(out))=(unsigned
char)(((tout0)>> 8L)&0xff); case 1: *(--(out))=(unsigned
char)(((tout0) )&0xff); } }
;
93#ifndef CBC_ENC_C__DONT_UPDATE_IV
94 xor0 = tin0;
95 xor1 = tin1;
96#endif
97 }
98#ifndef CBC_ENC_C__DONT_UPDATE_IV
99 iv = &(*ivec)[0];
100 l2c(xor0, iv)(*((iv)++)=(unsigned char)(((xor0) )&0xff), *((iv)++)=(unsigned
char)(((xor0)>> 8L)&0xff), *((iv)++)=(unsigned char
)(((xor0)>>16L)&0xff), *((iv)++)=(unsigned char)(((
xor0)>>24L)&0xff))
;
101 l2c(xor1, iv)(*((iv)++)=(unsigned char)(((xor1) )&0xff), *((iv)++)=(unsigned
char)(((xor1)>> 8L)&0xff), *((iv)++)=(unsigned char
)(((xor1)>>16L)&0xff), *((iv)++)=(unsigned char)(((
xor1)>>24L)&0xff))
;
102#endif
103 }
104 tin0 = tin1 = tout0 = tout1 = xor0 = xor1 = 0;
Although the value stored to 'xor1' is used in the enclosing expression, the value is never actually read from 'xor1'
105 tin[0] = tin[1] = 0;
106}