diff --git a/question/type/shortanswer/question.php b/question/type/shortanswer/question.php index ba1dfc786dc..07b1ab00fb6 100644 --- a/question/type/shortanswer/question.php +++ b/question/type/shortanswer/question.php @@ -117,7 +117,7 @@ class qtype_shortanswer_question extends question_graded_by_strategy * @return string the normalised string. */ protected static function safe_normalize($string) { - if (!$string) { + if ($string === '') { return ''; } @@ -126,7 +126,7 @@ class qtype_shortanswer_question extends question_graded_by_strategy } $normalised = normalizer_normalize($string, Normalizer::FORM_C); - if (!$normalised) { + if (is_null($normalised)) { // An error occurred in normalizer_normalize, but we have no idea what. debugging('Failed to normalise string: ' . $string, DEBUG_DEVELOPER); return $string; // Return the original string, since it is the best we have. diff --git a/question/type/shortanswer/tests/question_test.php b/question/type/shortanswer/tests/question_test.php index d287ff41ff5..5dc15ee694a 100644 --- a/question/type/shortanswer/tests/question_test.php +++ b/question/type/shortanswer/tests/question_test.php @@ -120,6 +120,18 @@ class qtype_shortanswer_question_test extends advanced_testcase { } } + public function test_compare_0_with_wildcard() { + // Test the classic PHP problem case with '0'. + $this->assertTrue((bool)qtype_shortanswer_question::compare_string_with_wildcard( + '0', '0', false)); + $this->assertTrue((bool)qtype_shortanswer_question::compare_string_with_wildcard( + '0', '0*', false)); + $this->assertTrue((bool)qtype_shortanswer_question::compare_string_with_wildcard( + '0', '*0', false)); + $this->assertTrue((bool)qtype_shortanswer_question::compare_string_with_wildcard( + '0', '*0*', false)); + } + public function test_is_complete_response() { $question = test_question_maker::make_question('shortanswer');