Bug Summary

File:out/../deps/openssl/openssl/crypto/des/ofb_enc.c
Warning:line 87, column 20
Although the value stored to 'd1' is used in the enclosing expression, the value is never actually read from 'd1'

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 ofb_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/ofb_enc.c
1/*
2 * Copyright 1995-2020 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 * DES low level APIs are deprecated for public use, but still ok for internal
12 * use.
13 */
14#include "internal/deprecated.h"
15
16#include "des_local.h"
17
18/*
19 * The input and output are loaded in multiples of 8 bits. What this means is
20 * that if you have numbits=12 and length=2 the first 12 bits will be
21 * retrieved from the first byte and half the second. The second 12 bits
22 * will come from the 3rd and half the 4th byte.
23 */
24void DES_ofb_encrypt(const unsigned char *in, unsigned char *out, int numbits,
25 long length, DES_key_schedule *schedule,
26 DES_cblock *ivec)
27{
28 register DES_LONG d0, d1, vv0, vv1, v0, v1, n = (numbits + 7) / 8;
29 register DES_LONG mask0, mask1;
30 register long l = length;
31 register int num = numbits;
32 DES_LONG ti[2];
33 unsigned char *iv;
34
35 if (num > 64)
36 return;
37 if (num > 32) {
38 mask0 = 0xffffffffL;
39 if (num >= 64)
40 mask1 = mask0;
41 else
42 mask1 = (1L << (num - 32)) - 1;
43 } else {
44 if (num == 32)
45 mask0 = 0xffffffffL;
46 else
47 mask0 = (1L << num) - 1;
48 mask1 = 0x00000000L;
49 }
50
51 iv = &(*ivec)[0];
52 c2l(iv, v0)(v0 =((DES_LONG)(*((iv)++))) , v0|=((DES_LONG)(*((iv)++)))<<
8L, v0|=((DES_LONG)(*((iv)++)))<<16L, v0|=((DES_LONG)(
*((iv)++)))<<24L)
;
53 c2l(iv, v1)(v1 =((DES_LONG)(*((iv)++))) , v1|=((DES_LONG)(*((iv)++)))<<
8L, v1|=((DES_LONG)(*((iv)++)))<<16L, v1|=((DES_LONG)(
*((iv)++)))<<24L)
;
54 ti[0] = v0;
55 ti[1] = v1;
56 while (l-- > 0) {
57 ti[0] = v0;
58 ti[1] = v1;
59 DES_encrypt1((DES_LONG *)ti, schedule, DES_ENCRYPT1);
60 vv0 = ti[0];
61 vv1 = ti[1];
62 c2ln(in, d0, d1, n){ in+=n; d0=d1=0; switch (n) { case 8: d1 =((DES_LONG)(*(--(in
))))<<24L; case 7: d1|=((DES_LONG)(*(--(in))))<<16L
; case 6: d1|=((DES_LONG)(*(--(in))))<< 8L; case 5: d1|=
((DES_LONG)(*(--(in)))); case 4: d0 =((DES_LONG)(*(--(in))))<<
24L; case 3: d0|=((DES_LONG)(*(--(in))))<<16L; case 2: d0
|=((DES_LONG)(*(--(in))))<< 8L; case 1: d0|=((DES_LONG)
(*(--(in)))); } }
;
63 in += n;
64 d0 = (d0 ^ vv0) & mask0;
65 d1 = (d1 ^ vv1) & mask1;
66 l2cn(d0, d1, out, n){ out+=n; switch (n) { case 8: *(--(out))=(unsigned char)(((d1
)>>24L)&0xff); case 7: *(--(out))=(unsigned char)((
(d1)>>16L)&0xff); case 6: *(--(out))=(unsigned char
)(((d1)>> 8L)&0xff); case 5: *(--(out))=(unsigned char
)(((d1) )&0xff); case 4: *(--(out))=(unsigned char)(((d0)
>>24L)&0xff); case 3: *(--(out))=(unsigned char)(((
d0)>>16L)&0xff); case 2: *(--(out))=(unsigned char)
(((d0)>> 8L)&0xff); case 1: *(--(out))=(unsigned char
)(((d0) )&0xff); } }
;
67 out += n;
68
69 if (num == 32) {
70 v0 = v1;
71 v1 = vv0;
72 } else if (num == 64) {
73 v0 = vv0;
74 v1 = vv1;
75 } else if (num > 32) { /* && num != 64 */
76 v0 = ((v1 >> (num - 32)) | (vv0 << (64 - num))) & 0xffffffffL;
77 v1 = ((vv0 >> (num - 32)) | (vv1 << (64 - num))) & 0xffffffffL;
78 } else { /* num < 32 */
79
80 v0 = ((v0 >> num) | (v1 << (32 - num))) & 0xffffffffL;
81 v1 = ((v1 >> num) | (vv0 << (32 - num))) & 0xffffffffL;
82 }
83 }
84 iv = &(*ivec)[0];
85 l2c(v0, iv)(*((iv)++)=(unsigned char)(((v0) )&0xff), *((iv)++)=(unsigned
char)(((v0)>> 8L)&0xff), *((iv)++)=(unsigned char)
(((v0)>>16L)&0xff), *((iv)++)=(unsigned char)(((v0)
>>24L)&0xff))
;
86 l2c(v1, iv)(*((iv)++)=(unsigned char)(((v1) )&0xff), *((iv)++)=(unsigned
char)(((v1)>> 8L)&0xff), *((iv)++)=(unsigned char)
(((v1)>>16L)&0xff), *((iv)++)=(unsigned char)(((v1)
>>24L)&0xff))
;
87 v0 = v1 = d0 = d1 = ti[0] = ti[1] = vv0 = vv1 = 0;
Although the value stored to 'd1' is used in the enclosing expression, the value is never actually read from 'd1'
88}