include/tools/fract.hxx | 9 tools/source/generic/fract.cxx | 24 + vcl/source/app/unohelp2.cxx | 10 xmlscript/source/xml_helper/xml_impctx.cxx | 11 xmlscript/source/xmldlg_imexp/xmldlg_impmodels.cxx | 175 ++++------- xmlscript/source/xmlflat_imexp/xmlbas_export.cxx | 16 - xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx | 21 - xmlsecurity/source/xmlsec/nss/nssinitializer.cxx | 20 - xmlsecurity/source/xmlsec/nss/xmlsecuritycontext_nssimpl.cxx | 19 - 9 files changed, 143 insertions(+), 162 deletions(-)
New commits: commit 595309903211ed5986ba0d2ef4d3b21bdfad10d9 Author: Noel Grandin <noel.gran...@collabora.co.uk> Date: Tue Sep 26 12:47:54 2017 +0200 loplugin:flatten in vcl..xmlsecurity Change-Id: I730fc0b3b6b7ac1803d75b5d9e007b15395888c6 Reviewed-on: https://gerrit.libreoffice.org/42826 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/vcl/source/app/unohelp2.cxx b/vcl/source/app/unohelp2.cxx index a69dc1f8135e..80d829964819 100644 --- a/vcl/source/app/unohelp2.cxx +++ b/vcl/source/app/unohelp2.cxx @@ -71,18 +71,12 @@ namespace vcl { namespace unohelper { // css::datatransfer::XTransferable uno::Any TextDataObject::getTransferData( const datatransfer::DataFlavor& rFlavor ) { - uno::Any aAny; - SotClipboardFormatId nT = SotExchange::GetFormat( rFlavor ); - if ( nT == SotClipboardFormatId::STRING ) - { - aAny <<= maText; - } - else + if ( nT != SotClipboardFormatId::STRING ) { throw datatransfer::UnsupportedFlavorException(); } - return aAny; + return uno::Any(maText); } uno::Sequence< datatransfer::DataFlavor > TextDataObject::getTransferDataFlavors( ) diff --git a/xmlscript/source/xml_helper/xml_impctx.cxx b/xmlscript/source/xml_helper/xml_impctx.cxx index 79d7889698b7..a51a99a57ed9 100644 --- a/xmlscript/source/xml_helper/xml_impctx.cxx +++ b/xmlscript/source/xml_helper/xml_impctx.cxx @@ -375,16 +375,13 @@ void DocumentHandlerImpl::initialize( { MGuard guard( m_pMutex ); Reference< xml::input::XRoot > xRoot; - if (arguments.getLength() == 1 && - (arguments[ 0 ] >>= xRoot) && - xRoot.is()) - { - m_xRoot = xRoot; - } - else + if (arguments.getLength() != 1 || + !(arguments[ 0 ] >>= xRoot) || + !xRoot.is()) { throw RuntimeException( "missing root instance!" ); } + m_xRoot = xRoot; } // XNamespaceMapping diff --git a/xmlscript/source/xmldlg_imexp/xmldlg_impmodels.cxx b/xmlscript/source/xmldlg_imexp/xmldlg_impmodels.cxx index 5135761f8d49..4bc7152f957b 100644 --- a/xmlscript/source/xmldlg_imexp/xmldlg_impmodels.cxx +++ b/xmlscript/source/xmldlg_imexp/xmldlg_impmodels.cxx @@ -216,16 +216,15 @@ Reference< xml::input::XElement > ProgressBarElement::startChildElement( Reference< xml::input::XAttributes > const & xAttributes ) { // event - if (m_xImport->isEventElement( nUid, rLocalName )) - { - return new EventElement( - nUid, rLocalName, xAttributes, this, m_xImport.get() ); - } - else + if (!m_xImport->isEventElement( nUid, rLocalName )) { throw xml::sax::SAXException( "expected event element!", Reference< XInterface >(), Any() ); } + + return new EventElement( + nUid, rLocalName, xAttributes, this, m_xImport.get() ); } + void ProgressBarElement::endElement() { ControlImportContext ctx( m_xImport.get(), getControlId( _xAttributes ), "com.sun.star.awt.UnoControlProgressBarModel" ); @@ -258,15 +257,14 @@ Reference< xml::input::XElement > ScrollBarElement::startChildElement( Reference< xml::input::XAttributes > const & xAttributes ) { // event - if (m_xImport->isEventElement( nUid, rLocalName )) - { - return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); - } - else + if (!m_xImport->isEventElement( nUid, rLocalName )) { throw xml::sax::SAXException("expected event element!", Reference< XInterface >(), Any() ); } + + return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); } + void ScrollBarElement::endElement() { ControlImportContext ctx( m_xImport.get(), getControlId( _xAttributes ), getControlModelName( "com.sun.star.awt.UnoControlScrollBarModel" , _xAttributes ) ); @@ -308,14 +306,12 @@ Reference< xml::input::XElement > SpinButtonElement::startChildElement( Reference< xml::input::XAttributes > const & xAttributes ) { // event - if (m_xImport->isEventElement( nUid, rLocalName )) - { - return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); - } - else + if (!m_xImport->isEventElement( nUid, rLocalName )) { throw xml::sax::SAXException("expected event element!", Reference< XInterface >(), Any() ); } + + return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); } void SpinButtonElement::endElement() @@ -356,15 +352,14 @@ Reference< xml::input::XElement > FixedLineElement::startChildElement( Reference< xml::input::XAttributes > const & xAttributes ) { // event - if (m_xImport->isEventElement( nUid, rLocalName )) - { - return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); - } - else + if (!m_xImport->isEventElement( nUid, rLocalName )) { throw xml::sax::SAXException("expected event element!", Reference< XInterface >(), Any() ); } + + return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); } + void FixedLineElement::endElement() { ControlImportContext ctx(m_xImport.get(), getControlId( _xAttributes ), "com.sun.star.awt.UnoControlFixedLineModel" ); @@ -396,15 +391,14 @@ Reference< xml::input::XElement > PatternFieldElement::startChildElement( Reference< xml::input::XAttributes > const & xAttributes ) { // event - if (m_xImport->isEventElement( nUid, rLocalName )) - { - return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); - } - else + if (!m_xImport->isEventElement( nUid, rLocalName )) { throw xml::sax::SAXException("expected event element!", Reference< XInterface >(), Any() ); } + + return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); } + void PatternFieldElement::endElement() { ControlImportContext ctx( m_xImport.get(), getControlId( _xAttributes ), "com.sun.star.awt.UnoControlPatternFieldModel" ); @@ -444,14 +438,12 @@ Reference< xml::input::XElement > FormattedFieldElement::startChildElement( Reference< xml::input::XAttributes > const & xAttributes ) { // event - if (m_xImport->isEventElement( nUid, rLocalName )) - { - return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); - } - else + if (!m_xImport->isEventElement( nUid, rLocalName )) { throw xml::sax::SAXException("expected event element!", Reference< XInterface >(), Any() ); } + + return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); } void FormattedFieldElement::endElement() @@ -572,15 +564,14 @@ Reference< xml::input::XElement > TimeFieldElement::startChildElement( Reference< xml::input::XAttributes > const & xAttributes ) { // event - if (m_xImport->isEventElement( nUid, rLocalName )) - { - return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); - } - else + if (!m_xImport->isEventElement( nUid, rLocalName )) { throw xml::sax::SAXException("expected event element!", Reference< XInterface >(), Any() ); } + + return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); } + void TimeFieldElement::endElement() { ControlImportContext ctx( m_xImport.get(), getControlId( _xAttributes ), "com.sun.star.awt.UnoControlTimeFieldModel" ); @@ -626,15 +617,14 @@ Reference< xml::input::XElement > NumericFieldElement::startChildElement( Reference< xml::input::XAttributes > const & xAttributes ) { // event - if (m_xImport->isEventElement( nUid, rLocalName )) - { - return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); - } - else + if (!m_xImport->isEventElement( nUid, rLocalName )) { throw xml::sax::SAXException( "expected event element!", Reference< XInterface >(), Any() ); } + + return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); } + void NumericFieldElement::endElement() { ControlImportContext ctx( m_xImport.get(), getControlId( _xAttributes ), "com.sun.star.awt.UnoControlNumericFieldModel" ); @@ -682,15 +672,14 @@ Reference< xml::input::XElement > DateFieldElement::startChildElement( Reference< xml::input::XAttributes > const & xAttributes ) { // event - if (m_xImport->isEventElement( nUid, rLocalName )) - { - return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); - } - else + if (!m_xImport->isEventElement( nUid, rLocalName )) { throw xml::sax::SAXException("expected event element!", Reference< XInterface >(), Any() ); } + + return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); } + void DateFieldElement::endElement() { ControlImportContext ctx( m_xImport.get(), getControlId( _xAttributes ), "com.sun.star.awt.UnoControlDateFieldModel" ); @@ -737,15 +726,14 @@ Reference< xml::input::XElement > CurrencyFieldElement::startChildElement( Reference< xml::input::XAttributes > const & xAttributes ) { // event - if (m_xImport->isEventElement( nUid, rLocalName )) - { - return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); - } - else + if (!m_xImport->isEventElement( nUid, rLocalName )) { throw xml::sax::SAXException( "expected event element!" , Reference< XInterface >(), Any() ); } + + return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); } + void CurrencyFieldElement::endElement() { ControlImportContext ctx( m_xImport.get(), getControlId( _xAttributes ), "com.sun.star.awt.UnoControlCurrencyFieldModel" ); @@ -793,15 +781,14 @@ Reference< xml::input::XElement > FileControlElement::startChildElement( Reference< xml::input::XAttributes > const & xAttributes ) { // event - if (m_xImport->isEventElement( nUid, rLocalName )) - { - return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); - } - else + if (!m_xImport->isEventElement( nUid, rLocalName )) { throw xml::sax::SAXException( "expected event element!", Reference< XInterface >(), Any() ); } + + return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); } + void FileControlElement::endElement() { ControlImportContext ctx( m_xImport.get(), getControlId( _xAttributes ), "com.sun.star.awt.UnoControlFileControlModel" ); @@ -837,15 +824,14 @@ Reference< xml::input::XElement > TreeControlElement::startChildElement( Reference< xml::input::XAttributes > const & xAttributes ) { // event - if (m_xImport->isEventElement( nUid, rLocalName )) - { - return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); - } - else + if (!m_xImport->isEventElement( nUid, rLocalName )) { throw xml::sax::SAXException( "expected event element!", Reference< XInterface >(), Any() ); } + + return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); } + void TreeControlElement::endElement() { ControlImportContext ctx( m_xImport.get(), getControlId( _xAttributes ), "com.sun.star.awt.tree.TreeControlModel" ); @@ -883,14 +869,12 @@ Reference< xml::input::XElement > ImageControlElement::startChildElement( Reference< xml::input::XAttributes > const & xAttributes ) { // event - if (m_xImport->isEventElement( nUid, rLocalName )) - { - return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); - } - else + if (!m_xImport->isEventElement( nUid, rLocalName )) { throw xml::sax::SAXException( "expected event element!" , Reference< XInterface >(), Any() ); } + + return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); } void ImageControlElement::endElement() @@ -925,14 +909,12 @@ Reference< xml::input::XElement > TextElement::startChildElement( Reference< xml::input::XAttributes > const & xAttributes ) { // event - if (m_xImport->isEventElement( nUid, rLocalName )) - { - return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); - } - else + if (!m_xImport->isEventElement( nUid, rLocalName )) { throw xml::sax::SAXException( "expected event element!", Reference< XInterface >(), Any() ); } + + return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); } void TextElement::endElement() @@ -972,15 +954,14 @@ Reference< xml::input::XElement > FixedHyperLinkElement::startChildElement( Reference< xml::input::XAttributes > const & xAttributes ) { // event - if (m_xImport->isEventElement( nUid, rLocalName )) - { - return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); - } - else + if (!m_xImport->isEventElement( nUid, rLocalName )) { throw xml::sax::SAXException( "expected event element!" , Reference< XInterface >(), Any() ); } + + return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); } + void FixedHyperLinkElement::endElement() { ControlImportContext ctx( m_xImport.get(), getControlId( _xAttributes ), "com.sun.star.awt.UnoControlFixedHyperlinkModel" ); @@ -1021,15 +1002,14 @@ Reference< xml::input::XElement > TextFieldElement::startChildElement( Reference< xml::input::XAttributes > const & xAttributes ) { // event - if (m_xImport->isEventElement( nUid, rLocalName )) - { - return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); - } - else + if (!m_xImport->isEventElement( nUid, rLocalName )) { throw xml::sax::SAXException( "expected event element!", Reference< XInterface >(), Any() ); } + + return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); } + void TextFieldElement::endElement() { ControlImportContext ctx( m_xImport.get(), getControlId( _xAttributes ), "com.sun.star.awt.UnoControlEditModel" ); @@ -1203,14 +1183,12 @@ Reference< xml::input::XElement > RadioElement::startChildElement( Reference< xml::input::XAttributes > const & xAttributes ) { // event - if (m_xImport->isEventElement( nUid, rLocalName )) - { - return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); - } - else + if (!m_xImport->isEventElement( nUid, rLocalName )) { throw xml::sax::SAXException("expected event element!", Reference< XInterface >(), Any() ); } + + return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); } // radiogroup @@ -1484,15 +1462,14 @@ Reference< xml::input::XElement > CheckBoxElement::startChildElement( Reference< xml::input::XAttributes > const & xAttributes ) { // event - if (m_xImport->isEventElement( nUid, rLocalName )) - { - return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); - } - else + if (!m_xImport->isEventElement( nUid, rLocalName )) { throw xml::sax::SAXException( "expected event element!", Reference< XInterface >(), Any() ); } + + return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); } + void CheckBoxElement::endElement() { ControlImportContext ctx( m_xImport.get(), getControlId( _xAttributes ), "com.sun.star.awt.UnoControlCheckBoxModel" ); @@ -1550,14 +1527,12 @@ Reference< xml::input::XElement > ButtonElement::startChildElement( Reference< xml::input::XAttributes > const & xAttributes ) { // event - if (m_xImport->isEventElement( nUid, rLocalName )) - { - return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); - } - else + if (!m_xImport->isEventElement( nUid, rLocalName )) { throw xml::sax::SAXException( "expected event element!", Reference< XInterface >(), Any() ); } + + return new EventElement( nUid, rLocalName, xAttributes, this, m_xImport.get() ); } void ButtonElement::endElement() @@ -1777,14 +1752,12 @@ Reference< xml::input::XElement > StyleElement::startChildElement( void StyleElement::endElement() { OUString aStyleId( _xAttributes->getValueByUidName( m_xImport->XMLNS_DIALOGS_UID, "style-id" ) ); - if (!aStyleId.isEmpty()) - { - m_xImport->addStyle( aStyleId, this ); - } - else + if (aStyleId.isEmpty()) { throw xml::sax::SAXException( "missing style-id attribute!", Reference< XInterface >(), Any() ); } + + m_xImport->addStyle( aStyleId, this ); } // styles diff --git a/xmlscript/source/xmlflat_imexp/xmlbas_export.cxx b/xmlscript/source/xmlflat_imexp/xmlbas_export.cxx index 48e14115ea8e..a0793905a54c 100644 --- a/xmlscript/source/xmlflat_imexp/xmlbas_export.cxx +++ b/xmlscript/source/xmlflat_imexp/xmlbas_export.cxx @@ -62,18 +62,16 @@ namespace xmlscript { ::osl::MutexGuard aGuard( m_aMutex ); - if ( aArguments.getLength() == 1 ) + if ( aArguments.getLength() != 1 ) { - aArguments[0] >>= m_xHandler; - - if ( !m_xHandler.is() ) - { - throw RuntimeException( "XMLBasicExporterBase::initialize: invalid argument format!" ); - } + throw RuntimeException( "XMLBasicExporterBase::initialize: invalid number of arguments!" ); } - else + + aArguments[0] >>= m_xHandler; + + if ( !m_xHandler.is() ) { - throw RuntimeException( "XMLBasicExporterBase::initialize: invalid number of arguments!" ); + throw RuntimeException( "XMLBasicExporterBase::initialize: invalid argument format!" ); } } diff --git a/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx b/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx index 073ac07d44d4..10f7d0779d2b 100644 --- a/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx +++ b/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx @@ -87,21 +87,18 @@ namespace { OUString sDef("ODF/DefaultVersion"); Sequence< css::uno::Any > aValues = GetProperties( Sequence<OUString>(&sDef,1) ); - if ( aValues.getLength() == 1) - { - sal_Int16 nTmp = 0; - if ( aValues[0] >>= nTmp ) - m_nODF = nTmp; - else - throw uno::RuntimeException( - "[xmlsecurity]SaveODFItem::SaveODFItem(): Wrong Type!", - nullptr ); - - } - else + if ( aValues.getLength() != 1) throw uno::RuntimeException( "[xmlsecurity] Could not open property Office.Common/Save/ODF/DefaultVersion", nullptr); + + sal_Int16 nTmp = 0; + if ( !(aValues[0] >>= nTmp) ) + throw uno::RuntimeException( + "[xmlsecurity]SaveODFItem::SaveODFItem(): Wrong Type!", + nullptr ); + + m_nODF = nTmp; } } diff --git a/xmlsecurity/source/xmlsec/nss/nssinitializer.cxx b/xmlsecurity/source/xmlsec/nss/nssinitializer.cxx index a996ce5d43f4..dd6336578ea4 100644 --- a/xmlsecurity/source/xmlsec/nss/nssinitializer.cxx +++ b/xmlsecurity/source/xmlsec/nss/nssinitializer.cxx @@ -441,19 +441,17 @@ css::uno::Reference< css::xml::crypto::XCipherContext > SAL_CALL ONSSInitializer { CK_MECHANISM_TYPE nNSSCipherID = 0; bool bW3CPadding = false; - if ( nCipherID == css::xml::crypto::CipherID::AES_CBC_W3C_PADDING ) - { - nNSSCipherID = CKM_AES_CBC; - bW3CPadding = true; + if ( nCipherID != css::xml::crypto::CipherID::AES_CBC_W3C_PADDING ) + throw css::lang::IllegalArgumentException("Unexpected cipher requested.", css::uno::Reference< css::uno::XInterface >(), 1 ); - if ( aKey.getLength() != 16 && aKey.getLength() != 24 && aKey.getLength() != 32 ) - throw css::lang::IllegalArgumentException("Unexpected key length.", css::uno::Reference< css::uno::XInterface >(), 2 ); + nNSSCipherID = CKM_AES_CBC; + bW3CPadding = true; - if ( aParams.getLength() ) - throw css::lang::IllegalArgumentException("Unexpected arguments provided for cipher creation.", css::uno::Reference< css::uno::XInterface >(), 5 ); - } - else - throw css::lang::IllegalArgumentException("Unexpected cipher requested.", css::uno::Reference< css::uno::XInterface >(), 1 ); + if ( aKey.getLength() != 16 && aKey.getLength() != 24 && aKey.getLength() != 32 ) + throw css::lang::IllegalArgumentException("Unexpected key length.", css::uno::Reference< css::uno::XInterface >(), 2 ); + + if ( aParams.getLength() ) + throw css::lang::IllegalArgumentException("Unexpected arguments provided for cipher creation.", css::uno::Reference< css::uno::XInterface >(), 5 ); css::uno::Reference< css::xml::crypto::XCipherContext > xResult; if( initNSS( m_xContext ) ) diff --git a/xmlsecurity/source/xmlsec/nss/xmlsecuritycontext_nssimpl.cxx b/xmlsecurity/source/xmlsec/nss/xmlsecuritycontext_nssimpl.cxx index 371a27f3d090..d01eb3ffa692 100644 --- a/xmlsecurity/source/xmlsec/nss/xmlsecuritycontext_nssimpl.cxx +++ b/xmlsecurity/source/xmlsec/nss/xmlsecuritycontext_nssimpl.cxx @@ -62,25 +62,20 @@ sal_Int32 SAL_CALL XMLSecurityContext_NssImpl::getSecurityEnvironmentNumber( ) css::uno::Reference< css::xml::crypto::XSecurityEnvironment > SAL_CALL XMLSecurityContext_NssImpl::getSecurityEnvironmentByIndex( sal_Int32 index ) { - css::uno::Reference< css::xml::crypto::XSecurityEnvironment > xSecurityEnvironment; - - if (index >= 0 && index < ( sal_Int32 )m_vSecurityEnvironments.size()) - { - xSecurityEnvironment = m_vSecurityEnvironments[index]; - } - else - throw RuntimeException() ; + if (index < 0 || index >= ( sal_Int32 )m_vSecurityEnvironments.size()) + throw RuntimeException(); + css::uno::Reference< css::xml::crypto::XSecurityEnvironment > xSecurityEnvironment = m_vSecurityEnvironments[index]; return xSecurityEnvironment; } css::uno::Reference< css::xml::crypto::XSecurityEnvironment > SAL_CALL XMLSecurityContext_NssImpl::getSecurityEnvironment( ) { - if (m_nDefaultEnvIndex >= 0 && m_nDefaultEnvIndex < ( sal_Int32 )m_vSecurityEnvironments.size()) - return getSecurityEnvironmentByIndex(m_nDefaultEnvIndex); - else - throw RuntimeException() ; + if (m_nDefaultEnvIndex < 0 || m_nDefaultEnvIndex >= ( sal_Int32 )m_vSecurityEnvironments.size()) + throw RuntimeException(); + + return getSecurityEnvironmentByIndex(m_nDefaultEnvIndex); } sal_Int32 SAL_CALL XMLSecurityContext_NssImpl::getDefaultSecurityEnvironmentIndex( ) commit cdd211d0a3f8bf977ecca67e72afbc63d53a72ee Author: Noel Grandin <noel.gran...@collabora.co.uk> Date: Tue Sep 26 12:49:50 2017 +0200 check for NaN in Fraction which can result from division by zero in earlier code, rather assert explicitly than suffer from weird very large sal_Int64 values (which is what NaN converts to, if we let it do the implicit conversion) Change-Id: Id059b84906bbc90a4fa51489ca96dc0267bb9342 Reviewed-on: https://gerrit.libreoffice.org/42798 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/include/tools/fract.hxx b/include/tools/fract.hxx index 68c0984a19a5..95aa5f5e727b 100644 --- a/include/tools/fract.hxx +++ b/include/tools/fract.hxx @@ -22,6 +22,7 @@ #include <sal/types.h> #include <tools/toolsdllapi.h> #include <memory> +#include <type_traits> class SvStream; @@ -37,8 +38,14 @@ public: Fraction(); Fraction( const Fraction & rFrac ); Fraction( Fraction && rFrac ); - Fraction( sal_Int64 nNum, sal_Int64 nDen ); explicit Fraction( double dVal ); + Fraction( double nNum, double nDen ); + Fraction( sal_Int64 nNum, sal_Int64 nDen ); + // just to prevent ambiguity between the sal_Int64 and double constructors + template<typename T1, typename T2> Fraction( + T1 nNum, T2 nDen, + typename std::enable_if<std::is_integral<T1>::value && std::is_integral<T2>::value, int>::type = 0) + : Fraction( sal_Int64(nNum), sal_Int64(nDen) ) {} ~Fraction(); bool IsValid() const; diff --git a/tools/source/generic/fract.cxx b/tools/source/generic/fract.cxx index 7d89ae812e6f..1a78d4dfc654 100644 --- a/tools/source/generic/fract.cxx +++ b/tools/source/generic/fract.cxx @@ -86,6 +86,27 @@ Fraction::Fraction( sal_Int64 nNum, sal_Int64 nDen ) : mpImpl(new Impl) mpImpl->valid = true; } +/** + * only here to prevent passing of NaN + */ +Fraction::Fraction( double nNum, double nDen ) : mpImpl(new Impl) +{ + assert( !std::isnan(nNum) ); + assert( !std::isnan(nDen) ); + assert( nNum >= std::numeric_limits<sal_Int32>::min() ); + assert( nNum <= std::numeric_limits<sal_Int32>::max( )); + assert( nDen >= std::numeric_limits<sal_Int32>::min() ); + assert( nDen <= std::numeric_limits<sal_Int32>::max( )); + if ( nDen == 0 ) + { + mpImpl->valid = false; + SAL_WARN( "tools.fraction", "'Fraction(" << nNum << ",0)' invalid fraction created" ); + return; + } + mpImpl->value.assign( sal_Int64(nNum), sal_Int64(nDen)); + mpImpl->valid = true; +} + Fraction::Fraction( double dVal ) : mpImpl(new Impl) { try @@ -439,7 +460,8 @@ SvStream& WriteFraction( SvStream& rOStream, const Fraction& rFract ) static boost::rational<sal_Int32> rational_FromDouble(double dVal) { if ( dVal > std::numeric_limits<sal_Int32>::max() || - dVal < std::numeric_limits<sal_Int32>::min() ) + dVal < std::numeric_limits<sal_Int32>::min() || + std::isnan(dVal) ) throw boost::bad_rational(); const sal_Int32 nMAX = std::numeric_limits<sal_Int32>::max() / 10; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits