summaryrefslogtreecommitdiff
path: root/oox
diff options
context:
space:
mode:
authorMaxim Monastirsky <momonasmon@gmail.com>2016-04-27 16:19:13 +0300
committerJan Holesovsky <kendy@collabora.com>2016-12-08 10:04:28 +0000
commit57983a4170559a5d45a28c5b3cb8c13393cfffff (patch)
treec665918954b0eeea211350484c98125a5dfe2a8a /oox
parentfe87a31885dc870a9a8e4c4dcb105a4a5627164f (diff)
tdf#80999 Canceling password prompt should abort detection
... instead of continuing the detection loop and being "detected" as plain text. The detection API will from now return a type based on the file extension only, which is far more useful than "plain text" anyway. Plus the media descriptor has a flag to indicate that the detection wasn't completed, which can be also used by the loading code to abort the loading process. Change-Id: Ida37e2687bd5cd86b5780620724e9bce82e11946 Reviewed-on: https://gerrit.libreoffice.org/24428 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Maxim Monastirsky <momonasmon@gmail.com> (cherry picked from commit 579c2de3a88483eff0664d3a303b19cbd386db47) Reviewed-on: https://gerrit.libreoffice.org/31738 Reviewed-by: Jan Holesovsky <kendy@collabora.com> Tested-by: Jan Holesovsky <kendy@collabora.com>
Diffstat (limited to 'oox')
-rw-r--r--oox/source/core/filterdetect.cxx18
1 files changed, 13 insertions, 5 deletions
diff --git a/oox/source/core/filterdetect.cxx b/oox/source/core/filterdetect.cxx
index ede7849c599f..ccae47bf70c9 100644
--- a/oox/source/core/filterdetect.cxx
+++ b/oox/source/core/filterdetect.cxx
@@ -387,11 +387,7 @@ OUString SAL_CALL FilterDetect::detect( Sequence< PropertyValue >& rMediaDescSeq
OUString aFilterName;
MediaDescriptor aMediaDescriptor( rMediaDescSeq );
- /* Check that the user has not chosen to abort detection, e.g. by hitting
- 'Cancel' in the password input dialog. This may happen because this
- filter detection is used by different filters. */
- bool bAborted = aMediaDescriptor.getUnpackedValueOrDefault( MediaDescriptor::PROP_ABORTED(), false );
- if( !bAborted ) try
+ try
{
aMediaDescriptor.addInputStream();
@@ -420,6 +416,18 @@ OUString SAL_CALL FilterDetect::detect( Sequence< PropertyValue >& rMediaDescSeq
}
catch( const Exception& )
{
+ if ( aMediaDescriptor.getUnpackedValueOrDefault( MediaDescriptor::PROP_ABORTED(), false ) )
+ /* The user chose to abort detection, e.g. by hitting 'Cancel' in the password input dialog,
+ so we have to return non-empty type name to abort the detection loop. The loading code is
+ supposed to check whether the "Aborted" flag is present in the descriptor, and to not attempt
+ to actually load the file then.
+
+ The returned type name is the one we got as an input, which typically was detected by the flat
+ detection (i.e. by file extension), so normally that's the correct one. Also at this point we
+ already know that the file is OLE encrypted package, so trying with other type detectors doesn't
+ make much sense anyway.
+ */
+ aFilterName = aMediaDescriptor.getUnpackedValueOrDefault( MediaDescriptor::PROP_TYPENAME(), OUString() );
}
// write back changed media descriptor members