XFA: merge patch from CL 729293003, use FX_ArraySize for safety
authorBruce Dawson <brucedawson@google.com>
Mon, 5 Jan 2015 19:53:18 +0000 (11:53 -0800)
committerBruce Dawson <brucedawson@google.com>
Mon, 5 Jan 2015 19:53:18 +0000 (11:53 -0800)
commit5c57933509aedb46399d320da16dfcc3e5acf28d
treea0d17a5a437669e27e239e743601208e4f09be33
parentbbd41bbd5e4ae9ca4f4a800c955471e41a947d98
XFA: merge patch from CL 729293003, use FX_ArraySize for safety

Note that the merge of this fix to XFA found six bugs. Five
were fixed in https://codereview.chromium.org/826573003 and
one was fixed in https://codereview.chromium.org/831293002.
These bugs are now impossible to compile.

Replace manual/error-prone/hard-to-verify arraysize calculations with
safe FX_ArraySize macro.

pdfium has numerous places where the number of elements in an array is
calculated with expressions like:

    sizeof(cFormats)/sizeof(FX_LPCWSTR)

This is suboptimal because it is verbose, it is easy to get wrong, and
it cannot be determined through casual inspection whether the code is
correct. It will give incorrect results if cFormats is a pointer instead
of an array and it will give incorrect results if FX_LPCWSTR is not the
type of the array elements.

The FX_WSTRC macro in fx_string.h which I fixed was particularly scary
because it would silently misbehave if passed a pointer.

The FX_ArraySize macro which I have added and started using (taken from
arraysize in v8's macros.h) is easier to use and will always give correct
results. If passed a pointer it will fail to compile.

For this change I only fixed instances of sizeof(FX_LPCWSTR). There
appear to be about 150 other places in the pdfium code that could
benefit from using FX_ArraySize.

TBR=bo_xu@foxitsoftware.com, tsepez@chromium.org

Review URL: https://codereview.chromium.org/818193004
core/include/fxcrt/fx_basic.h
core/include/fxcrt/fx_string.h
fpdfsdk/include/javascript/JS_Define.h
fpdfsdk/src/javascript/PublicMethods.cpp