diff options
author | Oleg Endo <olegendo@gcc.gnu.org> | 2012-07-10 22:07:29 +0000 |
---|---|---|
committer | Oleg Endo <olegendo@gcc.gnu.org> | 2012-07-10 22:07:29 +0000 |
commit | b6d10335317634f1a8c7b587fcf1f2596562c051 (patch) | |
tree | 6451f1018340857a61c07e7d05ae477484adfd62 /gcc | |
parent | c03cfe1eee37ec8369d85559af885a697149205a (diff) | |
download | gcc-b6d10335317634f1a8c7b587fcf1f2596562c051.zip gcc-b6d10335317634f1a8c7b587fcf1f2596562c051.tar.gz gcc-b6d10335317634f1a8c7b587fcf1f2596562c051.tar.bz2 |
re PR target/53886 (Seg fault in sh_insn_length_adjustment)
PR target/53886
* gcc.c-torture/compile/pr53886.c: New.
From-SVN: r189417
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr53886.c | 68 |
2 files changed, 73 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ec07297..3de1578 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-07-10 Oleg Endo <olegendo@gcc.gnu.org> + + PR target/53886 + * gcc.c-torture/compile/pr53886.c: New. + 2012-07-10 Dehao Chen <dehao@google.com> * gcc.dg/debug_info_inline.c: New test. diff --git a/gcc/testsuite/gcc.c-torture/compile/pr53886.c b/gcc/testsuite/gcc.c-torture/compile/pr53886.c new file mode 100644 index 0000000..89b6966 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr53886.c @@ -0,0 +1,68 @@ +/* PR target/53886 */ +typedef struct asn1_string_st ASN1_BIT_STRING; +typedef struct bignum_st BIGNUM; +typedef struct ec_group_st EC_GROUP; +typedef struct ec_key_st EC_KEY; + +struct ec_key_st +{ + EC_GROUP *group; + BIGNUM *priv_key; + unsigned int enc_flag; +} +X9_62_PENTANOMIAL; +typedef struct ec_privatekey_st +{ + ASN1_BIT_STRING *publicKey; +} +EC_PRIVATEKEY; + +extern EC_PRIVATEKEY* EC_PRIVATEKEY_new (void); +extern void EC_PRIVATEKEY_free (EC_PRIVATEKEY*); +extern unsigned char* CRYPTO_realloc (char*,int,const char*,int); + +int +i2d_ECPrivateKey (EC_KEY * a, unsigned char **out) +{ + int ret = 0, ok = 0; + unsigned char *buffer = 0; + unsigned buf_len = 0, tmp_len; + EC_PRIVATEKEY *priv_key = 0; + if (a == 0 || a->group == 0 || a->priv_key == 0) + { + ERR_put_error (16, (192), ((3 | 64)), + "", + 1234); + goto err; + } + if ((priv_key = EC_PRIVATEKEY_new ()) == 0) + { + ERR_put_error (16, (192), ((1 | 64)), + "", + 1241); + goto err; + } + if (!(a->enc_flag & 0x002)) + { + if (priv_key->publicKey == 0) + { + goto err; + } + if (tmp_len > buf_len) + { + unsigned char *tmp_buffer = + CRYPTO_realloc ((char *) buffer, (int) tmp_len, "", 1293); + buffer = tmp_buffer; + } + } + if ((ret = i2d_EC_PRIVATEKEY (priv_key, out)) == 0) + { + } + ok = 1; +err: + if (buffer) + CRYPTO_free (buffer); + if (priv_key) + EC_PRIVATEKEY_free (priv_key); + return (ok ? ret : 0); +} |