Bug #53573
closed
FormDataTraverser::getFieldValueRecursive() might return NULL
Added by Markus Klein almost 11 years ago.
Updated almost 7 years ago.
Description
This can cause WARNINGS in LanguageService, because of the calls in FormEngine::getPlaceholderValue.
Either check the $value in FormEngine::getPlaceholderAttribute() or ensure getFieldValueRecursive() behaves like documented and not returning NULL.
- Target version changed from next-patchlevel to 6.2.0
- Status changed from New to Needs Feedback
Can you please add a proper testplan or complete stack trace for that? Which PHP version are you using?
Testplan by reading:
Code in FormEngine::getPlaceholderAttribute() line 6493:
$value = $this->getPlaceholderValue($table, $field, $config, $row);
// Cleanup the string and support 'LLL:'
$value = htmlspecialchars(trim($this->sL($value)));
Call stack:
1: FormEngine::getPlaceholderAttribute()
2: FormEngine::getPlaceholderValue() -> called in FormEngine:6493
3: FormDataTraverser::getTraversedFieldValue() -> called in FormEngine:6519
4: FormDataTraverser::getFieldValueRecursive() -> called in FormDataTraverser:110
Since getFieldValueRecursive() might return NULL, $value in the code above can be NULL, therefore a call to $this->sL(NULL) can happen, which furthermore calls $GLOBALS['LANG']->sL($x), which access some array with $theArray[...][$x] -> PHP Warning
Besides that getFieldValueRecursive() should have NULL in the @return clause.
- Assignee deleted (
Oliver Hader)
- Priority changed from Must have to Could have
- Is Regression changed from Yes to No
Ok, so this is highly theoretical and there is way to reproduce your bug-report. Lets start nitpicking:
- the documentation on FormDataTraverser::getTraversedFieldValue needs to be modified
- this method shall return data/values from database, thus "mixed" would be a proper return value there, since there is no casting to string either
- thus everything that can be interpreted as TRUE will be returned as delivered by the (individual) DatabaseConnection
- the "undefined index" thingy is a PHP notice on PHP 5.3, that's why I asked for your PHP version, maybe it's different there
- but I guess it's still just a PHP notice and not a warning and we already have a lots of notices in the whole system
Thus, I could easily close this report as "cannot reproduce" or just change the documentation.
Since there are lots of other calls to $LANG->sL() with NULL values and undefined index earlier in the whole system, I kindly ask you to not create reports and also not to assign them to me directly.
- Subject changed from FormDataTraverser:: getFieldValueRecursive() might return NULL to FormDataTraverser::getFieldValueRecursive() might return NULL
- Status changed from Needs Feedback to Under Review
- Status changed from Under Review to Resolved
- % Done changed from 0 to 100
- Status changed from Resolved to Closed
Also available in: Atom
PDF