diff options
author | Kamil Tekiela <tekiela246@gmail.com> | 2022-08-04 22:59:31 +0300 |
---|---|---|
committer | Kamil Tekiela <tekiela246@gmail.com> | 2022-08-08 16:41:51 +0300 |
commit | 06d58c96622389d86a74e23bd709706857cbc11a (patch) | |
tree | 5b0fc0de3f64552b2fce1256ece16d1c3084d67e | |
parent | d075fa56a2a26ce104db43a466caee6bc451b70f (diff) |
Fix bug #17663
Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>
-rw-r--r-- | libraries/classes/InsertEdit.php | 5 | ||||
-rw-r--r-- | test/classes/InsertEditTest.php | 120 |
2 files changed, 122 insertions, 3 deletions
diff --git a/libraries/classes/InsertEdit.php b/libraries/classes/InsertEdit.php index 7ea09e576f..33b692777d 100644 --- a/libraries/classes/InsertEdit.php +++ b/libraries/classes/InsertEdit.php @@ -1674,9 +1674,8 @@ class InsertEdit } elseif ( ! (empty($multiEditFuncs[$key]) && isset($multiEditColumnsPrev[$key]) - && (($currentValue === "'" . $this->dbi->escapeString($multiEditColumnsPrev[$key]) . "'") - || ($currentValue === '0x' . $multiEditColumnsPrev[$key]))) - && $currentValue + && $currentValue === $multiEditColumnsPrev[$key]) + && $currentValueAsAnArray !== '' ) { // avoid setting a field to NULL when it's already NULL // (field had the null checkbox before the update diff --git a/test/classes/InsertEditTest.php b/test/classes/InsertEditTest.php index 1c7ad8eee3..13ee204b74 100644 --- a/test/classes/InsertEditTest.php +++ b/test/classes/InsertEditTest.php @@ -2023,6 +2023,126 @@ class InsertEditTest extends AbstractTestCase ], $result ); + + // Test to see if a zero-string is not ignored + $result = $this->insertEdit->getQueryValuesForInsertAndUpdateInMultipleEdit( + $multi_edit_columns_name, + [], + '0', + [], + [], + false, + [], + [], + "'0'", + [], + '0', + [] + ); + + $this->assertEquals( + [ + ["`fld` = '0'"], + [], + ], + $result + ); + + // Can only happen when table contains blob field that was left unchanged during edit + $result = $this->insertEdit->getQueryValuesForInsertAndUpdateInMultipleEdit( + $multi_edit_columns_name, + [], + '', + [], + [], + false, + [], + [], + '', + [], + '0', + [] + ); + + $this->assertEquals( + [ + [], + [], + ], + $result + ); + + // Test to see if a field will be set to null when it wasn't null previously + $result = $this->insertEdit->getQueryValuesForInsertAndUpdateInMultipleEdit( + $multi_edit_columns_name, + ['on'], + '', + [], + [], + false, + [], + [], + 'NULL', + [], + '0', + [] + ); + + $this->assertEquals( + [ + ['`fld` = NULL'], + [], + ], + $result + ); + + // Test to see if a field will be ignored if it was null previously + $result = $this->insertEdit->getQueryValuesForInsertAndUpdateInMultipleEdit( + $multi_edit_columns_name, + ['on'], + '', + [], + [], + false, + [], + [], + 'NULL', + [], + '0', + ['on'] + ); + + $this->assertEquals( + [ + [], + [], + ], + $result + ); + + // Test to see if a field will be ignored if it the value is unchanged + $result = $this->insertEdit->getQueryValuesForInsertAndUpdateInMultipleEdit( + $multi_edit_columns_name, + [], + "a'b", + ["a'b"], + [], + false, + [], + [], + "'a\'b'", + [], + '0', + [] + ); + + $this->assertEquals( + [ + [], + [], + ], + $result + ); } /** |