Warmcat homepage andy@warmcat.com
libwebsockets
{"schema":"libjg2-1", "vpath":"/git/", "avatar":"/git/avatar/", "alang":"", "gen_ut":1747026574, "reponame":"openssl", "desc":"OpenSSL", "owner": { "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },"url":"https://warmcat.com/repo/openssl", "f":3, "items": [ {"schema":"libjg2-1", "cid":"13630c5c1b4b6db8032c5e4b2eef1717", "commit": {"type":"commit", "time": 1499301430, "time_ofs": 600, "oid_tree": { "oid": "210a3fe7883637f3399cf661dadf89ff5d7b9b9e", "alias": []}, "oid":{ "oid": "eee9552212ecc9e19bc09ea8a1b8428dc7394f45", "alias": []}, "msg": "Bounds check string functions in apps. This includes strcat, strcpy and sprintf.", "sig_commit": { "git_time": { "time": 1499301430, "offset": 600 }, "name": "Pauli", "email": "paul.dale@oracle.com", "md5": "4616f8cb80bd6ce4dab75d05e07cd125" }, "sig_author": { "git_time": { "time": 1499301430, "offset": 600 }, "name": "Pauli", "email": "paul.dale@oracle.com", "md5": "4616f8cb80bd6ce4dab75d05e07cd125" }}, "body": "Bounds check string functions in apps.\nThis includes strcat, strcpy and sprintf.\n\nIn the x509 app, the code has been cleaned up as well.\n\nReviewed-by: Rich Salz \u003crsalz@openssl.org\u003e\n(Merged from https://github.com/openssl/openssl/pull/3868)\n" , "diff": "diff --git a/apps/enc.c b/apps/enc.c\nindex 3383073..cc6fa0a 100644\n--- a/apps/enc.c\n+++ b/apps/enc.c\n@@ -312,7 +312,7 @@ int enc_main(int argc, char **argv)\n for (;;) {\n char prompt[200];\n \n- sprintf(prompt, \u0022enter %s %s password:\u0022,\n+ BIO_snprintf(prompt, sizeof(prompt), \u0022enter %s %s password:\u0022,\n OBJ_nid2ln(EVP_CIPHER_nid(cipher)),\n (enc) ? \u0022encryption\u0022 : \u0022decryption\u0022);\n strbuf[0] \u003d '\u005c0';\n@@ -565,7 +565,7 @@ int enc_main(int argc, char **argv)\n #endif\n release_engine(e);\n OPENSSL_free(pass);\n- return (ret);\n+ return ret;\n }\n \n static void show_ciphers(const OBJ_NAME *name, void *arg)\n@@ -599,7 +599,7 @@ static int set_hex(char *in, unsigned char *out, int size)\n n \u003d strlen(in);\n if (n \u003e (size * 2)) {\n BIO_printf(bio_err, \u0022hex string is too long\u005cn\u0022);\n- return (0);\n+ return 0;\n }\n memset(out, 0, size);\n for (i \u003d 0; i \u003c n; i++) {\n@@ -609,7 +609,7 @@ static int set_hex(char *in, unsigned char *out, int size)\n break;\n if (!isxdigit(j)) {\n BIO_printf(bio_err, \u0022non-hex digit\u005cn\u0022);\n- return (0);\n+ return 0;\n }\n j \u003d (unsigned char)OPENSSL_hexchar2int(j);\n if (i \u0026 1)\n@@ -617,5 +617,5 @@ static int set_hex(char *in, unsigned char *out, int size)\n else\n out[i / 2] \u003d (j \u003c\u003c 4);\n }\n- return (1);\n+ return 1;\n }\ndiff --git a/apps/pkcs12.c b/apps/pkcs12.c\nindex 82d2bb9..2ec8fdc 100644\n--- a/apps/pkcs12.c\n+++ b/apps/pkcs12.c\n@@ -27,6 +27,8 @@ NON_EMPTY_TRANSLATION_UNIT\n # define CLCERTS 0x8\n # define CACERTS 0x10\n \n+#define PASSWD_BUF_SIZE 2048\n+\n static int get_cert_chain(X509 *cert, X509_STORE *store,\n STACK_OF(X509) **chain);\n int dump_certs_keys_p12(BIO *out, const PKCS12 *p12,\n@@ -119,7 +121,7 @@ int pkcs12_main(int argc, char **argv)\n {\n char *infile \u003d NULL, *outfile \u003d NULL, *keyname \u003d NULL, *certfile \u003d NULL;\n char *name \u003d NULL, *csp_name \u003d NULL;\n- char pass[2048] \u003d \u0022\u0022, macpass[2048] \u003d \u0022\u0022;\n+ char pass[PASSWD_BUF_SIZE] \u003d \u0022\u0022, macpass[PASSWD_BUF_SIZE] \u003d \u0022\u0022;\n int export_cert \u003d 0, options \u003d 0, chain \u003d 0, twopass \u003d 0, keytype \u003d 0;\n int iter \u003d PKCS12_DEFAULT_ITER, maciter \u003d PKCS12_DEFAULT_ITER;\n # ifndef OPENSSL_NO_RC2\n@@ -455,7 +457,7 @@ int pkcs12_main(int argc, char **argv)\n }\n \n if (!twopass)\n- strcpy(macpass, pass);\n+ OPENSSL_strlcpy(macpass, pass, sizeof(macpass));\n \n p12 \u003d PKCS12_create(cpass, name, key, ucert, certs,\n key_pbe, cert_pbe, iter, -1, keytype);\n@@ -583,7 +585,7 @@ int pkcs12_main(int argc, char **argv)\n OPENSSL_free(badpass);\n OPENSSL_free(passin);\n OPENSSL_free(passout);\n- return (ret);\n+ return ret;\n }\n \n int dump_certs_keys_p12(BIO *out, const PKCS12 *p12, const char *pass,\ndiff --git a/apps/s_time.c b/apps/s_time.c\nindex c4f4037..b10c7e1 100644\n--- a/apps/s_time.c\n+++ b/apps/s_time.c\n@@ -49,7 +49,13 @@\n \n static SSL *doConnection(SSL *scon, const char *host, SSL_CTX *ctx);\n \n+/*\n+ * Define a HTTP get command globally.\n+ * Also define the size of the command, this is two bytes less than\n+ * the size of the string because the %s is replaced by the URL.\n+ */\n static const char fmt_http_get_cmd[] \u003d \u0022GET %s HTTP/1.0\u005cr\u005cn\u005cr\u005cn\u0022;\n+static const size_t fmt_http_get_cmd_size \u003d sizeof(fmt_http_get_cmd) - 2;\n \n typedef enum OPTION_choice {\n OPT_ERR \u003d -1, OPT_EOF \u003d 0, OPT_HELP,\n@@ -173,7 +179,7 @@ int s_time_main(int argc, char **argv)\n break;\n case OPT_WWW:\n www_path \u003d opt_arg();\n- buf_size \u003d strlen(www_path) + sizeof(fmt_http_get_cmd);\n+ buf_size \u003d strlen(www_path) + fmt_http_get_cmd_size;\n if (buf_size \u003e sizeof(buf)) {\n BIO_printf(bio_err, \u0022%s: -www option is too long\u005cn\u0022, prog);\n goto end;\n@@ -230,9 +236,9 @@ int s_time_main(int argc, char **argv)\n goto end;\n \n if (www_path !\u003d NULL) {\n- sprintf(buf, fmt_http_get_cmd, www_path);\n- buf_len \u003d strlen(buf);\n- if (SSL_write(scon, buf, buf_len) \u003c\u003d 0)\n+ buf_len \u003d BIO_snprintf(buf, sizeof(buf), fmt_http_get_cmd,\n+ www_path);\n+ if (buf_len \u003c\u003d 0 || SSL_write(scon, buf, buf_len) \u003c\u003d 0)\n goto end;\n while ((i \u003d SSL_read(scon, buf, sizeof(buf))) \u003e 0)\n bytes_read +\u003d i;\n@@ -288,9 +294,8 @@ int s_time_main(int argc, char **argv)\n }\n \n if (www_path !\u003d NULL) {\n- sprintf(buf, fmt_http_get_cmd, www_path);\n- buf_len \u003d strlen(buf);\n- if (SSL_write(scon, buf, buf_len) \u003c\u003d 0)\n+ buf_len \u003d BIO_snprintf(buf, sizeof(buf), fmt_http_get_cmd, www_path);\n+ if (buf_len \u003c\u003d 0 || SSL_write(scon, buf, buf_len) \u003c\u003d 0)\n goto end;\n while (SSL_read(scon, buf, sizeof(buf)) \u003e 0)\n continue;\n@@ -319,8 +324,9 @@ int s_time_main(int argc, char **argv)\n goto end;\n \n if (www_path !\u003d NULL) {\n- sprintf(buf, \u0022GET %s HTTP/1.0\u005cr\u005cn\u005cr\u005cn\u0022, www_path);\n- if (SSL_write(scon, buf, strlen(buf)) \u003c\u003d 0)\n+ buf_len \u003d BIO_snprintf(buf, sizeof(buf), fmt_http_get_cmd,\n+ www_path);\n+ if (buf_len \u003c\u003d 0 || SSL_write(scon, buf, buf_len) \u003c\u003d 0)\n goto end;\n while ((i \u003d SSL_read(scon, buf, sizeof(buf))) \u003e 0)\n bytes_read +\u003d i;\n@@ -361,7 +367,7 @@ int s_time_main(int argc, char **argv)\n end:\n SSL_free(scon);\n SSL_CTX_free(ctx);\n- return (ret);\n+ return ret;\n }\n \n /*-\n@@ -375,7 +381,7 @@ static SSL *doConnection(SSL *scon, const char *host, SSL_CTX *ctx)\n fd_set readfds;\n \n if ((conn \u003d BIO_new(BIO_s_connect())) \u003d\u003d NULL)\n- return (NULL);\n+ return NULL;\n \n BIO_set_conn_hostname(conn, host);\n \ndiff --git a/apps/x509.c b/apps/x509.c\nindex 484192b..840e127 100644\n--- a/apps/x509.c\n+++ b/apps/x509.c\n@@ -890,34 +890,27 @@ int x509_main(int argc, char **argv)\n ASN1_OBJECT_free(objtmp);\n release_engine(e);\n OPENSSL_free(passin);\n- return (ret);\n+ return ret;\n }\n \n-static ASN1_INTEGER *x509_load_serial(const char *CAfile, const char *serialfile,\n- int create)\n+static ASN1_INTEGER *x509_load_serial(const char *CAfile,\n+ const char *serialfile, int create)\n {\n- char *buf \u003d NULL, *p;\n+ char *buf \u003d NULL;\n ASN1_INTEGER *bs \u003d NULL;\n BIGNUM *serial \u003d NULL;\n- size_t len;\n \n- len \u003d ((serialfile \u003d\u003d NULL)\n- ? (strlen(CAfile) + strlen(POSTFIX) + 1)\n- : (strlen(serialfile))) + 1;\n- buf \u003d app_malloc(len, \u0022serial# buffer\u0022);\n if (serialfile \u003d\u003d NULL) {\n- strcpy(buf, CAfile);\n- for (p \u003d buf; *p; p++)\n- if (*p \u003d\u003d '.') {\n- *p \u003d '\u005c0';\n- break;\n- }\n- strcat(buf, POSTFIX);\n- } else {\n- strcpy(buf, serialfile);\n+ const char *p \u003d strchr(CAfile, '.');\n+ size_t len \u003d p !\u003d NULL ? (size_t)(p - CAfile) : strlen(CAfile);\n+\n+ buf \u003d app_malloc(len + sizeof(POSTFIX), \u0022serial# buffer\u0022);\n+ memcpy(buf, CAfile, len);\n+ memcpy(buf + len, POSTFIX, sizeof(POSTFIX));\n+ serialfile \u003d buf;\n }\n \n- serial \u003d load_serial(buf, create, NULL);\n+ serial \u003d load_serial(serialfile, create, NULL);\n if (serial \u003d\u003d NULL)\n goto end;\n \n@@ -926,7 +919,7 @@ static ASN1_INTEGER *x509_load_serial(const char *CAfile, const char *serialfile\n goto end;\n }\n \n- if (!save_serial(buf, NULL, serial, \u0026bs))\n+ if (!save_serial(serialfile, NULL, serial, \u0026bs))\n goto end;\n \n end:\n","s":{"c":1747026574,"u": 52261}} ],"g": 53759,"chitpc": 0,"ehitpc": 0,"indexed":0 , "ab": 0, "si": 0, "db":0, "di":0, "sat":0, "lfc": "0000"}