Details: • Operating System:
• Windows 7 Enterprise SP1 - 64-bit • OpenSSL version: (From opensslv.h) • #define OPENSSL_VERSION_NUMBER 0x0090807fL • Visual Studio: • Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86 Problem: Sending an empty string to EVP_EncryptUpdate() causes this message and core/program exception: .\crypto\evp\evp_enc.c(282): OpenSSL internal error, assertion failed: inl > 0 As an aside, this works fine on Unix Compile string: cl /wd4996 /EHsc -D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1 /I/openssl/include /W3 /Zi openssl_bug.c ws2_32.lib advapi32.lib ws2_32.lib advapi32.lib user32.lib gdi32.lib /link /libpath:c:\openssl\lib libeay32.lib ssleay32.lib Sample code: #include <stdio.h> #include <string.h> #include "openssl/evp.h" int main () { const EVP_CIPHER *cipher = EVP_bf_cbc (); EVP_CIPHER_CTX ctx; char* plaintext = "test"; unsigned char encrypted_block[1024]; unsigned char *encrypted = encrypted_block; int encrypted_size; EVP_CIPHER_CTX_init (&ctx); EVP_EncryptInit (&ctx, cipher, NULL, NULL); // Works if (!EVP_EncryptUpdate(&ctx, encrypted, &encrypted_size, plaintext, strlen(plaintext))) { printf ("Failure @ #1\n"); } else { printf ("Success @ #1\n"); } // Doesn't work (cores actually) plaintext[0] = '\0'; if (!EVP_EncryptUpdate(&ctx, encrypted, &encrypted_size, plaintext, strlen(plaintext))) { printf ("Failure @ #2\n"); } else { printf ("Success @ #2\n"); } } Let me know if you need any additional information, Greg Sternberg
Details:
Sending an empty string to EVP_EncryptUpdate() causes this message and core/program exception:
Compile string:
cl /wd4996 /EHsc -D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1 /I/openssl/include /W3 /Zi openssl_bug.c ws2_32.lib advapi32.lib ws2_32.lib advapi32.lib user32.lib gdi32.lib /link /libpath:c:\openssl\lib libeay32.lib ssleay32.lib
Sample code:
#include <stdio.h>
#include <string.h>
#include "openssl/evp.h"
int main ()
{
const EVP_CIPHER *cipher = EVP_bf_cbc ();
EVP_CIPHER_CTX ctx;
char* plaintext = "test";
unsigned char encrypted_block[1024];
unsigned char *encrypted = encrypted_block;
int encrypted_size;
EVP_CIPHER_CTX_init (&ctx);
EVP_EncryptInit (&ctx,
cipher,
NULL,
NULL);
// Works
if (!EVP_EncryptUpdate(&ctx,
encrypted,
&encrypted_size,
plaintext,
strlen(plaintext))) {
printf ("Failure @ #1\n");
} else {
printf ("Success @ #1\n");
}
// Doesn't work (cores actually)
plaintext[0] = '\0';
if (!EVP_EncryptUpdate(&ctx,
encrypted,
&encrypted_size,
plaintext,
strlen(plaintext))) {
printf ("Failure @ #2\n");
} else {
printf ("Success @ #2\n");
}
}
Let me know if you need any additional information,
Greg Sternberg
- Operating System:
- Windows 7 Enterprise SP1 - 64-bit
- OpenSSL version: (From opensslv.h)
- #define OPENSSL_VERSION_NUMBER 0x0090807fL
- Visual Studio:
- Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86
Sending an empty string to EVP_EncryptUpdate() causes this message and core/program exception:
.\crypto\evp\evp_enc.c(282): OpenSSL internal error, assertion failed: inl > 0As an aside, this works fine on Unix
Compile string:
cl /wd4996 /EHsc -D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1 /I/openssl/include /W3 /Zi openssl_bug.c ws2_32.lib advapi32.lib ws2_32.lib advapi32.lib user32.lib gdi32.lib /link /libpath:c:\openssl\lib libeay32.lib ssleay32.lib
Sample code:
#include <stdio.h>
#include <string.h>
#include "openssl/evp.h"
int main ()
{
const EVP_CIPHER *cipher = EVP_bf_cbc ();
EVP_CIPHER_CTX ctx;
char* plaintext = "test";
unsigned char encrypted_block[1024];
unsigned char *encrypted = encrypted_block;
int encrypted_size;
EVP_CIPHER_CTX_init (&ctx);
EVP_EncryptInit (&ctx,
cipher,
NULL,
NULL);
// Works
if (!EVP_EncryptUpdate(&ctx,
encrypted,
&encrypted_size,
plaintext,
strlen(plaintext))) {
printf ("Failure @ #1\n");
} else {
printf ("Success @ #1\n");
}
// Doesn't work (cores actually)
plaintext[0] = '\0';
if (!EVP_EncryptUpdate(&ctx,
encrypted,
&encrypted_size,
plaintext,
strlen(plaintext))) {
printf ("Failure @ #2\n");
} else {
printf ("Success @ #2\n");
}
}
Let me know if you need any additional information,
Greg Sternberg