Commit Graph

8215 Commits

Author SHA1 Message Date
PKEuS da34883770 Improved message invalidscanf: Removed misleading example from verbose message 2016-08-01 18:42:27 +02:00
Dmitry-Me b3877a8ba0 Cleanup variable names
* fix typo
* use camelCase instead of underscore
2016-08-01 14:33:56 +03:00
Daniel Marjamäki 1c51fbce7a astyle formatting
[ci skip]
2016-08-01 13:01:01 +02:00
Daniel Marjamäki 095b2f73f7 Library: look for cfg files in more paths, include exepath even if CFGDIR is used. 2016-08-01 12:58:33 +02:00
Daniel Marjamäki 09b6568ea2 Fixed #7646 (podtypes do not get proper valuetype) 2016-07-31 19:47:34 +02:00
Daniel Marjamäki 8d89eefff9 Merge pull request #815 from boos/cwe-mapping-8
CWE mapping of invalidscanf, invalidScanfArgType_s, invalidScanfArgType_int, invalidScanfArgType_float, invalidPrintfArgType_s, invalidPrintfArgType_n, invalidPrintfArgType_p, invalidPrintfArgType_int, invalidPrintfArgType_uint, invalidPrintfArgType_sint, invalidPrintfArgType_float, wrongPrintfScanfParameterPositionError
2016-07-31 14:14:48 +02:00
Daniel Marjamäki b6246ecc55 bump simplecpp and update Preprocessor to handle new simplecpp::Output enum constants 2016-07-31 12:10:30 +02:00
Roberto Martelloni 9ab4057ddc CWE mapping of invalidscanf, invalidScanfArgType_s, invalidScanfArgType_int, invalidScanfArgType_float, invalidPrintfArgType_s, invalidPrintfArgType_n, invalidPrintfArgType_p, invalidPrintfArgType_int, invalidPrintfArgType_uint, invalidPrintfArgType_sint, invalidPrintfArgType_float, wrongPrintfScanfParameterPositionError 2016-07-31 10:49:36 +01:00
Daniel Marjamäki 66d0d7a0ad Fixed #7553 (False positive with 1.74 'returning an integer in a function with pointer return type' when no integer is used) 2016-07-29 21:53:58 +02:00
Daniel Marjamäki 5611a71820 Fixed #7543 (False positive boolean result used in bitwise operation) 2016-07-29 18:46:43 +02:00
Daniel Marjamäki 89be630156 Fixed #7543 (False positive boolean result used in bitwise operation) 2016-07-29 17:24:22 +02:00
Daniel Marjamäki a65ae3ce2e Token: Allow dollar sign in identifiers 2016-07-29 13:42:11 +02:00
Daniel Marjamäki 5546f052ef Preprocessor: the simplecpp begin() and end() has been renamed 2016-07-29 08:51:57 +02:00
PKEuS 452ecc7ceb Improved check: Detect passedByValue even for arguments that are not declared as "const" 2016-07-28 19:37:10 +02:00
Daniel Marjamäki 0777ecd071 Fixed #7640 (Preprocessor::getConfigs: -U is not honored) 2016-07-28 19:22:59 +02:00
Daniel Marjamäki 57951a2681 one more fix for rules 2016-07-28 15:35:41 +02:00
Daniel Marjamäki 1a4ef60e7c Fixed #7639 (rule support partially broken since simplecpp was introduced) 2016-07-28 13:40:52 +02:00
PKEuS 3f4fe8f578 Refactorized CheckBufferOverrun:
- Removed redundant code
- Apply non-simplified checking in test suite
2016-07-27 17:28:43 +02:00
PKEuS 13c11b8c1d Fixed compilation with HAVE_RULES 2016-07-26 17:10:05 +02:00
PKEuS eafed235a6 Attempt to fix build on Unix systems, ran AStyle. 2016-07-26 16:50:32 +02:00
PKEuS 9a6569fde1 Always set ErrorMessage::file0 to ensure that the source file that cppcheck is checking when an error occurs can be identified
Removed unused function and unused includes from preprocessor.h/cpp
2016-07-26 16:28:40 +02:00
Dmitry-Me 560e7d618d Get rid of "magic" patterns set
* magic should match "knownPatterns" but it didn't
* two identical sets are of no use
2016-07-26 16:42:17 +03:00
Daniel Marjamäki 71f62950ed Tokenizer::findGarbageCode: Make it less picky about 'UNKNOWN_MACRO if ..' 2016-07-26 14:35:11 +02:00
PKEuS fc1603eb9b MathLib, ValueType: Support integer suffix "i64" 2016-07-26 13:19:53 +02:00
Daniel Marjamäki 7ff9545b10 Fixed #7637 (FP syntax error assignment in switch) 2016-07-26 12:15:55 +02:00
Daniel Marjamäki fd19ab4ed1 fix garbage code handling 2016-07-26 08:50:00 +02:00
Dmitry-Me 2b31afe2ab Variable name consistent with surroundings 2016-07-26 09:46:50 +03:00
Daniel Marjamäki 383b815cca Tokenizer: refactoring garbage code handling 2016-07-26 08:16:10 +02:00
Matthias Krüger 6fd8edd6e5 Symboldatabase::sizeOfType: fix crash; fixes #7615 2016-07-26 01:18:47 +02:00
PKEuS 045116f797 Optimized SymbolDatabase::findVariableType(). 2016-07-25 18:33:22 +02:00
Dmitry-Me 64360d291d Variable name consistent with surroundings 2016-07-25 17:04:18 +03:00
Daniel Marjamäki 2feb86a6af Preprocessor: set platform info 2016-07-25 14:52:23 +02:00
Daniel Marjamäki 90faa80590 Preprocessor: Cleanup unused functions 2016-07-25 14:29:02 +02:00
Daniel Marjamäki 7ef02a7469 Cleanup Tokenizer 2016-07-25 12:12:11 +02:00
Daniel Marjamäki adf16fae8b Remove handling of ##, __FILE__, __LINE__ from tokenizer 2016-07-25 07:58:03 +02:00
Daniel Marjamäki 0767284ca1 Fixed #7630 (FP: dead store, modifying array, index var modified) 2016-07-25 07:35:33 +02:00
Daniel Marjamäki cd3818088f Remove unused function Tokenizer::tokenizeCondition 2016-07-24 14:37:43 +02:00
Daniel Marjamäki e9fef003ac Preprocessor: refactoring directives, they are now only set once for each file 2016-07-24 14:02:21 +02:00
Daniel Marjamäki 48fc19b34c Remove unused function Preprocessor::preprocessCleanupDirectives() 2016-07-24 12:51:52 +02:00
PKEuS 2e2800f5bd Fixed several MSVC warnings 2016-07-24 12:36:36 +02:00
PKEuS f44d9d5c9b Optimizations in CheckInternal:
- Run checks only on executable scopes
- Simplified patterns
2016-07-24 12:05:58 +02:00
Daniel Marjamäki f931c0cf2b Preprocessor::getConfigs: Handle invalid #else better 2016-07-23 14:40:01 +02:00
Daniel Marjamäki ed4a47de45 Tokenizer: Improve syntax checking of switch,if,while 2016-07-22 16:54:24 +02:00
Dmitry-Me 224e55780e Add const where const access is enough 2016-07-22 15:35:07 +03:00
PKEuS 12e3cf584c Visual Studio solution:
- Fixed include paths
- Export simplecpp to cppcheck-core.dll
- Added /Zc:rvalueCast
2016-07-21 20:38:58 +02:00
Daniel Marjamäki 99307846cf Preprocessor: simplecpp optimisations 2016-07-21 19:42:26 +02:00
Daniel Marjamäki 79ac409c7d Preprocessor: Refactoring Preprocessor::getConfigs() 2016-07-21 19:11:49 +02:00
Daniel Marjamäki b2f1b95e38 Bump simplecpp. Preprocessor: Warn about missing includes 2016-07-21 12:47:00 +02:00
Daniel Marjamäki 9899e81f2e handle inline suppressions in included files 2016-07-21 07:57:23 +02:00
Daniel Marjamäki e16f0e500c Preprocessor: Parse comments and then remove them 2016-07-21 07:48:17 +02:00
Daniel Marjamäki 8a1936d5c9 update AdditionalIncludeDirectories in vcxproj files 2016-07-20 22:17:23 +02:00
Daniel Marjamäki 4ceba79f7f Replace std::to_string, to hopefully make appveyor happier 2016-07-20 20:43:32 +02:00
Daniel Marjamäki f1839ebfaf Preprocessor: Fix crashes for invalid code 2016-07-20 20:39:03 +02:00
Daniel Marjamäki 03d2829fb9 Merge simplecpp branch 2016-07-20 12:21:00 +02:00
Daniel Marjamäki a68da1a725 ValueType: Set valuetype for sizeof argument 2016-07-20 09:39:48 +02:00
Daniel Marjamäki 3eef225b36 Revert preprocessor fix for struct tag macros. There are performance problems. 2016-07-19 18:59:58 +02:00
Matthias Krüger 18d5a7317e fix travis; fix [lib/preprocessor.cpp:2772]: (style) The scope of the variable 'noprescan' can be reduced. 2016-07-19 17:28:31 +02:00
Mavik 3e86c7b637 Fixed #5700 (Defect: False positives due to failure to expand struct tag macros) 2016-07-19 16:52:53 +02:00
Daniel Marjamäki 9bda97975a Fixed #7037 (32bit (-m32): testsuite fails) 2016-07-19 12:14:55 +02:00
Daniel Marjamäki 83b982064d Fixed #7579 (varid not set properly in 'int b[] = { m * a[0] };') 2016-07-18 15:27:08 +02:00
Daniel Marjamäki f55040a987 Fix segfault when there is no ast generated in lambda function 2016-07-18 14:08:44 +02:00
Daniel Marjamäki 0ddeac0429 refactor (use ast) and improve CheckOther::checkRedundantAssignment (warn about global variables unless they are volatile, handle arrays in lhs better) 2016-07-18 12:43:23 +02:00
Daniel Marjamäki b9443771fb cleanup tests 2016-07-18 10:42:03 +02:00
Daniel Marjamäki 4f051bf9dd Fixed #7599 (valueFlowAST: handle && and || better) 2016-07-17 21:51:20 +02:00
Daniel Marjamäki 0162f33d3f CheckSizeof: allow division with sizeof(char) when byte count is expected. 2016-07-17 19:19:15 +02:00
Daniel Marjamäki 45ee29d5dc Fixed #7604 (simplifyCalculation: expression '0 && x[2]' is not simplified properly) 2016-07-17 15:52:53 +02:00
PKEuS 801fd8f96a Support trailing return types (C++11) 2016-07-17 15:47:50 +02:00
Daniel Marjamäki 91e38f3eb9 Fixed #7582 (false positive: Division by result of sizeof(). strncpy() expects a size in bytes) 2016-07-17 15:22:14 +02:00
PKEuS 7a183779e2 CheckOther::checkMemsetZeroBytes(): Support wmemset() 2016-07-16 21:53:25 +02:00
Daniel Marjamäki b8ca9fc844 Tokenizer: alternative tokens for and,or,etc. context sensitive for both c and c++. 2016-07-16 21:29:56 +02:00
Daniel Marjamäki 920ac5a3f6 astyle formatting
[ci skip]
2016-07-16 21:21:24 +02:00
Daniel Marjamäki 6e3d5dc0d1 Fixed #7580 (False positive when using logical operator keywords 'and', 'or') 2016-07-16 20:21:31 +02:00
amai2012 920b402d35 Merge pull request #813 from boos/cwe-mapping-7
CWE mapping of incorrectStringCompare, literalWithCharPtrCompare, charLiteralWithCharPtrCompare, incorrectStringBooleanError, staticStringCompare, stringCompare, signConversion, unusedFunction, unusedVariable
2016-07-16 13:10:22 +02:00
Roberto Martelloni 25525e38a7 CWE mapping of incorrectStringCompare, literalWithCharPtrCompare, charLiteralWithCharPtrCompare, incorrectStringBooleanError, staticStringCompare, stringCompare, signConversion, unusedFunction, unusedVariable 2016-07-16 10:07:06 +01:00
PKEuS 0afecd8fee Do not simplify name "CALLBACK" away on non-windows platforms (#7554) 2016-07-16 10:43:28 +02:00
Robert Reif 768c26805c Fixed false positive: %Ld in format string (no. 1) requires 'long long' but the argument type is 'long long' (#7601). 2016-07-16 10:33:46 +02:00
Alexander Mai e495bfb960 Use proper tokenizer variable 2016-07-10 22:24:28 +02:00
PKEuS f869f7ebde Fixed false positive reademptycontainer when end() is called (#7560) 2016-07-10 10:48:21 +02:00
Simon Martin bae81fba05 Silent clang -Wshadow warning. (#812)
Add an optional extended description…
2016-07-09 19:07:58 +02:00
Alexander Mai 4eef5642c9 Avoid null pointer access in CheckBufferOverrun::runSimplifiedChecks 2016-07-09 19:00:59 +02:00
PKEuS ded8d80b23 Library: Support arguments with default value. Fixed default value handling for <container> tags broken in last commit. 2016-07-09 12:44:17 +02:00
PKEuS b5d3ecb942 Updated TinyXML, make use of second argument of XMLElement::Attribute() 2016-07-09 11:56:07 +02:00
Robert Reif c1594bedbb Fixed creation of SymbolDatabase for some template code (#7594) 2016-07-09 09:22:52 +02:00
PKEuS 44a19b527e Use ValueFlow and SymbolDatabase to detect buffer overflows with new and malloc, improving support for enums (#7576) 2016-07-08 20:53:08 +02:00
Robert Reif eca805ba3b ValueFlow: Fixed constant folding of sizeof(enum) and sizeof(enumerator) (#7564) 2016-07-08 20:39:34 +02:00
PKEuS a808549af0 Support lambdas in simplifyCompoundAssignment (#7571) 2016-07-08 20:10:33 +02:00
Roberto Martelloni 87372ccd58 CWE mapping of sizeofForArrayParameter, sizeofForPointer, sizeofDivisionMemfunc, sizeofwithnumericparameter, sizeofsizeof, sizeofCalculation, sizeofVoid, sizeofDereferencedVoidPointer, arithOperationsOnVoidPointer (#810) 2016-07-08 09:06:55 +02:00
Daniel Marjamäki a87b4368cb Revert "Preprocessor: Start replacing our Preprocessor code with simplecpp"
This reverts commit 9820783b60.

There was Travis errors I'll need to look more at.
2016-07-07 23:45:42 +02:00
Daniel Marjamäki 9820783b60 Preprocessor: Start replacing our Preprocessor code with simplecpp 2016-07-07 22:58:56 +02:00
PKEuS 644a216394 Fixed two false positives related to char arrays initialized by a literal:
- Run check for writing to string literals on non-simplified token list (#7283)
- Run buffer overrun checking for string literals on non-simplified token list (https://sourceforge.net/p/cppcheck/discussion/general/thread/2c33dfc5/)
2016-07-07 19:38:15 +02:00
PKEuS 3bdcf68990 Fixed false positive in CheckUnusedVar::checkFunctionVariableUsage(): Bailout when break; is encountered
See also: https://sourceforge.net/p/cppcheck/discussion/general/thread/1c169dc5/
2016-07-07 18:27:31 +02:00
Simon Martin 40eacb19b1 Ticket #7565: Handle numbers with several C++14 integer separators. 2016-07-01 23:24:28 +02:00
umanamente 0f11007c19 Fixed #7083 (false positive: typedef and initialization with strings) 2016-06-21 22:42:46 +02:00
PKEuS dde6f5eaea Do not warn about alloca() in C89 mode (#7558) 2016-06-20 09:30:41 +02:00
PKEuS 721bc32b2d Fixed crash in CheckVaarg::va_list_usage() (#7559) 2016-06-20 09:24:23 +02:00
Bartlomiej Grzeskowiak a5cfa2b12c - #7522 and #7428 revisited. ((a&7)>7U) is always false and ((X|7)>=6) is correct (X can be negative). 2016-06-17 12:12:53 +02:00
Daniel Marjamäki d1f06ff47c Fixed #7175 (False positive performance warning (buffer overwritten before its old content has been used)) 2016-06-13 15:46:43 +02:00
PKEuS 53e2cabdbb Properly support "break" in CheckVaarg::va_list_usage() (#7533)
Ran AStyle
2016-06-07 19:28:32 +02:00
PKEuS 321d2aeafb Set version to 1.74.99/1.75 dev 2016-06-07 19:19:58 +02:00
Roberto Martelloni f1c39dbda7 CWE mapping of stlIfStrFind, stlcstrReturn, stlcstrParam, stlSize, (#801)
StlMissingComparison, redundantIfRemove.
2016-06-05 18:24:06 +02:00
Daniel Marjamäki e7f1318d4b 1.74: set version 2016-06-05 18:21:33 +02:00
Daniel Marjamäki bab4f61bb2 astyle formatting
[ci skip]
2016-06-05 14:14:28 +02:00
Simon Martin 3c10b25b3e Ticket #7117: Properly detect if a const ternary operator is in a template parameter list. 2016-06-05 14:13:32 +02:00
Robert Reif 583b340034 enum: set the return type of derived class functions returning enums defined in a base class. 2016-06-05 14:08:33 +02:00
Simon Martin 3095f47a7b Ticket #7137: Properly detect C++14 digit separators. (#802)
Add an optional extended description…
2016-06-04 22:55:55 +02:00
PKEuS 9a61559eca Fixed false positive va_list_usedBeforeStarted (#7527) 2016-06-02 09:32:45 +02:00
Daniel Marjamäki 3eb0e9b6c0 astyle formatting
[ci skip]
2016-05-30 09:17:40 +02:00
Daniel Marjamäki c24a4b9189 Removed enum mismatch checker. Ticket #6960. 2016-05-29 18:00:37 +02:00
Robert Reif f4dd43a71a Fixed #7523 (Scope::findEnumerator(): does not find enum constant from other enum type) 2016-05-29 14:45:45 +02:00
Simon Martin 12a298b9cd Ticket #7445: Properly represent integer types smaller than int in CheckIO::ArgumentInfo. 2016-05-28 15:36:13 +02:00
Daniel Marjamäki 18fc288de9 Fixed #5582 (Crash when there is OOM) 2016-05-28 13:24:19 +02:00
Daniel Marjamäki 2b2f12bcd5 Fixed #6758 (Preprocessor: handle #__VA_ARGS__) 2016-05-28 11:27:45 +02:00
Daniel Marjamäki cee67730b1 Fixed #5746 (Cppcheck returns error-exitcode when globally suppressed error is encounted when running with multiple jobs.) 2016-05-27 20:13:51 +02:00
PKEuS 00e4f70fe3 Fixed false positives in CheckSizeof::checkSizeofForPointerSize() (#7518) 2016-05-26 21:25:29 +02:00
PKEuS 373ac52480 Mention exact function name in invalidscanf message (#5649) 2016-05-26 21:11:33 +02:00
Daniel Marjamäki 4b903a838f Fixed #5522 (CheckLeakAutoVar: Don't treat 'x==p' as dereference of p) 2016-05-26 19:22:38 +02:00
Daniel Marjamäki 2417f72c5e Silence Travis 2016-05-26 18:31:52 +02:00
Daniel Marjamäki 2a42f245a9 Fixed #7130 (Wrong assignmentInAssert when using lambda in predicate function) 2016-05-26 18:29:29 +02:00
Daniel Marjamäki 54be403f64 Fixed #7026 (Cppcheck does not recognizes the use of a variabile inside lambda function) 2016-05-26 18:07:56 +02:00
Daniel Marjamäki 38741868b5 Fixed #3989 (false positive: memory leak (inline function)) 2016-05-26 17:42:27 +02:00
Daniel Marjamäki 8b088a472f SymbolDatabase: Refactoring 2016-05-26 12:04:18 +02:00
Daniel Marjamäki f45233682e SymbolDatabase: Code cleanup 2016-05-26 12:00:03 +02:00
Robert Reif 66cacde3db Fixed #7513 (value flow of array dimension with enum doesn't always work) 2016-05-26 11:25:50 +02:00
Daniel Marjamäki 50352c8d69 Fixed #3552 (Don't warn about missing ctor for class inside union) 2016-05-25 19:05:16 +02:00
PKEuS c7b3836379 Small refactorizations:
- Optimized performance of several functions by adding pre-checks
- Simplified some code
- Fixed VS warning in testsymboldatabase.cpp
2016-05-25 15:30:49 +02:00
PKEuS 8c0eab3eb3 Optimization: Improved performance of CheckBufferOverrun::checkScope() when dealing with a large number of arrays (#5975)
-> checking time decreases from 1010s to 50s on the code snippet in #5975
-> Dropped a garbage code unit test
2016-05-25 14:42:00 +02:00
Daniel Marjamäki ae97f53244 Fixed #6184 (ValueType: overloaded < operator) 2016-05-25 13:56:36 +02:00
Matthias Krüger 0556edd151 fix #7505 (crash on invalid code) 2016-05-25 13:14:34 +02:00
PKEuS 728d4242dc Refactorizations in CheckBufferOverrun:
- Improved performance of CheckBufferOverrun::checkScope()
- Made some patterns less restrictive
2016-05-25 11:50:34 +02:00
PKEuS cda246da75 Refactorized CheckUnusedVar::checkStructMemberUsage(): Reimplemented check based on symboldatabase 2016-05-25 11:13:31 +02:00
PKEuS e22c177003 Optimized Tokenizer::setVarIdPass1(): Avoid costly std::stack<std::map<...>>::push/pop() operations for struct initializers 2016-05-24 23:15:09 +02:00
PKEuS 43bf1bb685 Refactorized CheckUnusedVar::checkStructMemberUsage(): Drastically reduced number of Token::findmatch() calls to improve performance 2016-05-24 23:10:39 +02:00
PKEuS 686cc6640e Refactorization: Improved performance of Tokenizer::simplifyMicrosoftMemoryFunctions() and Tokenizer::simplifyMicrosoftStringFunctions()
- Added pre-check before doing complex Token::Match() calls
- Use std::map instead of std::set
2016-05-24 21:19:20 +02:00
PKEuS f2ae295f1e Support char literals in CheckCondition::checkIncorrectLogicOperator() (#5912) 2016-05-24 15:08:48 +02:00
Daniel Marjamäki 06a594a9e0 Fixed #6207 ('not' misinterpreted as alternative C token) 2016-05-24 13:33:21 +02:00
Daniel Marjamäki 684966f674 Fixed #7509 (ValueType: wrong type for container element - std::array) 2016-05-24 09:07:38 +02:00
Daniel Marjamäki 397480f929 Fixed #7376 (ValueType: wrong type for container element) 2016-05-23 18:53:59 +02:00
Daniel Marjamäki 37afc57a2a Fixed #7455 (Suppressions: not working well with windows path separators) 2016-05-23 15:38:47 +02:00
Simon Martin ce05d23bb7 No need to use std::min() in normalizeCharacterLiteral. 2016-05-22 22:59:32 +02:00
PKEuS 4bb99a7887 Improved CheckSizeof::checkSizeofForPointerSize():
- Support cast in front of malloc() call
- Support sizeof(type) pattern (#4428)
2016-05-22 22:29:52 +02:00
Daniel Marjamäki beabe110fd setVarIdStructMembers: Fixed code so loop will terminate properly 2016-05-22 21:42:10 +02:00
Daniel Marjamäki 710e066a9a Fixed #6406 (VarId: struct member initialization) 2016-05-22 21:18:52 +02:00
PKEuS 64d2fd2f57 Added new attribute "arg" to <alloc> and <dealloc> to specify the argument that is allocated/deallocated.
This fixes several issues with allocation functions in windows.cfg, such as HeapAlloc() and VirtualAllocEx() (#7503)
2016-05-22 17:19:14 +02:00
PKEuS 851c6e0ed5 Improved buffer overflow checking for scanf: %c with a width (#3494) 2016-05-22 14:00:26 +02:00
Roberto Martelloni dce7128f30 CWE mapping of duplicateExpression, duplicateBreak (CWE561), unreachableCode, unsignedLessThanZero, unsignedPositive, pointerLessThanZero, pointerPositive, varFuncNullUB, nanInArithmeticExpression, commaSeparatedReturn, (#797)
ignoredReturnValue
2016-05-22 13:17:38 +02:00
Daniel Marjamäki 06d5e73e88 Fixed #7471 (Tokenizer::prepareTernaryOpForAST: typedef with comma inside ?:) 2016-05-22 11:33:21 +02:00
Daniel Marjamäki b7b92b2140 Fixed #6674 (false positive 'unusedPrivateFunction' - calling virtual function in subclass) 2016-05-21 20:07:35 +02:00
Daniel Marjamäki c23c1f245c Fixed #6989 (incorrect memleak error) 2016-05-21 14:03:28 +02:00
Daniel Marjamäki a5dc76d50c Refactoring, use ast instead of token list to find if variable is used in rhs 2016-05-21 13:45:08 +02:00
amai2012 b60b283c5b Merge pull request #796 from simartin/ticket_7452_follow_up
Address comments in PR#794 and alternative fix for ticket #7500.
2016-05-21 09:20:23 +02:00