diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-06-18 07:14:24 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-06-18 07:14:24 +0400 |
commit | f7e22c729e8fa20a0c9b6d9f1d2bba0505c09585 (patch) | |
tree | 7403ac8b7e56ac3624d2daf81e74fbfa7a30c8f1 /source/blender/makesdna | |
parent | 64d02584e1b56a3d11a1ade1754be644433f8eab (diff) |
throw an error if preprocessor definitions are used for DNA array lengths (previously would fail silently & not work right).
Diffstat (limited to 'source/blender/makesdna')
-rw-r--r-- | source/blender/makesdna/intern/makesdna.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/source/blender/makesdna/intern/makesdna.c b/source/blender/makesdna/intern/makesdna.c index 8b841b67e54..80299d44a78 100644 --- a/source/blender/makesdna/intern/makesdna.c +++ b/source/blender/makesdna/intern/makesdna.c @@ -670,6 +670,8 @@ int arraysize(char *astr, int len) } else if( str[a]==']' && cp) { str[a]= 0; + /* if 'cp' is a preprocessor definition, it will evaluate to 0, + * the caller needs to check for this case and throw an error */ mul*= atoi(cp); } } @@ -713,7 +715,12 @@ static int calculate_structlens(int firststruct) /* has the name an extra length? (array) */ mul= 1; if( cp[namelen-1]==']') mul= arraysize(cp, namelen); - + + if (mul == 0) { + printf("Zero array size found or could not parse %s: '%.*s'\n", types[structtype], namelen + 1, cp); + dna_error = 1; + } + /* 4-8 aligned/ */ if(sizeof(void *) == 4) { if (len % 4) { @@ -743,7 +750,12 @@ static int calculate_structlens(int firststruct) /* has the name an extra length? (array) */ mul= 1; if( cp[namelen-1]==']') mul= arraysize(cp, namelen); - + + if (mul == 0) { + printf("Zero array size found or could not parse %s: '%.*s'\n", types[structtype], namelen + 1, cp); + dna_error = 1; + } + /* struct alignment */ if(type >= firststruct) { if(sizeof(void *)==8 && (len % 8) ) { |