From 316738c9d042980ba450d2b4234682bfc723cd53 Mon Sep 17 00:00:00 2001 From: Dominik Stadler Date: Thu, 10 Aug 2023 04:54:25 +0000 Subject: [PATCH] Bug 66425: Avoid a NullPointerException found via oss-fuzz Handle some data that can be missing properly. Should fix https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=61332 git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1911585 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/poi/hwpf/model/FFData.java | 112 ++++++++---------- ...nimized-POIHWPFFuzzer-4951943183990784.doc | Bin 0 -> 86528 bytes 2 files changed, 51 insertions(+), 61 deletions(-) create mode 100644 test-data/document/clusterfuzz-testcase-minimized-POIHWPFFuzzer-4951943183990784.doc diff --git a/poi-scratchpad/src/main/java/org/apache/poi/hwpf/model/FFData.java b/poi-scratchpad/src/main/java/org/apache/poi/hwpf/model/FFData.java index 50f51ed663..9166ca9588 100644 --- a/poi-scratchpad/src/main/java/org/apache/poi/hwpf/model/FFData.java +++ b/poi-scratchpad/src/main/java/org/apache/poi/hwpf/model/FFData.java @@ -30,8 +30,7 @@ import org.apache.poi.util.LittleEndianConsts; * drop-down list box. */ @Internal -public class FFData -{ +public class FFData { private FFDataBase _base; /** @@ -79,89 +78,82 @@ public class FFData private Xstz _xstzTextFormat; - public FFData( byte[] std, int offset ) - { - fillFields( std, offset ); + public FFData(byte[] std, int offset) { + fillFields(std, offset); } - public void fillFields( final byte[] std, final int startOffset ) // NOSONAR - { + public void fillFields(final byte[] std, final int startOffset) { // NOSONAR int offset = startOffset; - this._base = new FFDataBase( std, offset ); + this._base = new FFDataBase(std, offset); offset += FFDataBaseAbstractType.getSize(); - this._xstzName = new Xstz( std, offset ); + this._xstzName = new Xstz(std, offset); offset += this._xstzName.getSize(); - if ( _base.getIType() == ITYPE_TEXT ) - { - _xstzTextDef = new Xstz( std, offset ); + if (_base.getIType() == ITYPE_TEXT) { + _xstzTextDef = new Xstz(std, offset); offset += this._xstzTextDef.getSize(); - } - else - { + } else { this._xstzTextDef = null; } - if ( _base.getIType() == ITYPE_CHCK - || _base.getIType() == ITYPE_DROP ) - { + if (_base.getIType() == ITYPE_CHCK + || _base.getIType() == ITYPE_DROP) { this._wDef = LittleEndian.getUShort(std, offset); offset += LittleEndianConsts.SHORT_SIZE; - } - else - { + } else { this._wDef = null; } - _xstzTextFormat = new Xstz( std, offset ); + _xstzTextFormat = new Xstz(std, offset); offset += this._xstzTextFormat.getSize(); - _xstzHelpText = new Xstz( std, offset ); + _xstzHelpText = new Xstz(std, offset); offset += this._xstzHelpText.getSize(); - _xstzStatText = new Xstz( std, offset ); + _xstzStatText = new Xstz(std, offset); offset += this._xstzStatText.getSize(); - _xstzEntryMcr = new Xstz( std, offset ); + _xstzEntryMcr = new Xstz(std, offset); offset += this._xstzEntryMcr.getSize(); - _xstzExitMcr = new Xstz( std, offset ); + _xstzExitMcr = new Xstz(std, offset); offset += this._xstzExitMcr.getSize(); - if ( _base.getIType() == ITYPE_DROP ) { - _hsttbDropList = new Sttb( std, offset ); + if (_base.getIType() == ITYPE_DROP) { + _hsttbDropList = new Sttb(std, offset); } } /** * specify the default item selected (zero-based index). */ - public int getDefaultDropDownItemIndex() - { + public int getDefaultDropDownItemIndex() { + if (_wDef == null) { + return 0; + } return _wDef; } - public String[] getDropList() - { + public String[] getDropList() { + if (_hsttbDropList == null) { + return null; + } return _hsttbDropList.getData(); } - public int getSize() - { + public int getSize() { int size = FFDataBaseAbstractType.getSize(); size += _xstzName.getSize(); - if ( _base.getIType() == ITYPE_TEXT ) - { + if (_base.getIType() == ITYPE_TEXT && _xstzTextDef != null) { size += _xstzTextDef.getSize(); } - if ( _base.getIType() == ITYPE_CHCK - || _base.getIType() == ITYPE_DROP ) - { + if (_base.getIType() == ITYPE_CHCK + || _base.getIType() == ITYPE_DROP) { size += LittleEndianConsts.SHORT_SIZE; } @@ -171,49 +163,47 @@ public class FFData size += _xstzEntryMcr.getSize(); size += _xstzExitMcr.getSize(); - if ( _base.getIType() == ITYPE_DROP ) - { + if (_base.getIType() == ITYPE_DROP) { size += _hsttbDropList.getSize(); } return size; } - public String getTextDef() - { + public String getTextDef() { + if (_xstzTextDef == null) { + return null; + } return _xstzTextDef.getAsJavaString(); } - public byte[] serialize() - { + public byte[] serialize() { byte[] buffer = new byte[getSize()]; int offset = 0; - _base.serialize( buffer, offset ); + _base.serialize(buffer, offset); offset += FFDataBaseAbstractType.getSize(); - offset += _xstzName.serialize( buffer, offset ); + offset += _xstzName.serialize(buffer, offset); - if ( _base.getIType() == ITYPE_TEXT ) - { - offset += _xstzTextDef.serialize( buffer, offset ); + if (_base.getIType() == ITYPE_TEXT && _xstzTextDef != null) { + offset += _xstzTextDef.serialize(buffer, offset); } - if ( _base.getIType() == ITYPE_CHCK - || _base.getIType() == ITYPE_DROP ) - { - LittleEndian.putUShort( buffer, offset, _wDef ); + if (_base.getIType() == ITYPE_CHCK + || _base.getIType() == ITYPE_DROP) { + LittleEndian.putUShort(buffer, offset, _wDef); offset += LittleEndianConsts.SHORT_SIZE; } - offset += _xstzTextFormat.serialize( buffer, offset ); - offset += _xstzHelpText.serialize( buffer, offset ); - offset += _xstzStatText.serialize( buffer, offset ); - offset += _xstzEntryMcr.serialize( buffer, offset ); - offset += _xstzExitMcr.serialize( buffer, offset ); + offset += _xstzTextFormat.serialize(buffer, offset); + offset += _xstzHelpText.serialize(buffer, offset); + offset += _xstzStatText.serialize(buffer, offset); + offset += _xstzEntryMcr.serialize(buffer, offset); + offset += _xstzExitMcr.serialize(buffer, offset); - if ( _base.getIType() == ITYPE_DROP ) { - _hsttbDropList.serialize( buffer, offset ); + if (_base.getIType() == ITYPE_DROP) { + _hsttbDropList.serialize(buffer, offset); } return buffer; diff --git a/test-data/document/clusterfuzz-testcase-minimized-POIHWPFFuzzer-4951943183990784.doc b/test-data/document/clusterfuzz-testcase-minimized-POIHWPFFuzzer-4951943183990784.doc new file mode 100644 index 0000000000000000000000000000000000000000..1c9856a8bb48b8c93d1336304472a383b3e68bd7 GIT binary patch literal 86528 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 literal 0 HcmV?d00001