mirror of
https://github.com/openwrt/openwrt.git
synced 2024-11-27 03:43:37 +08:00
fritz-tools: fix returning wrong values due to strncmp usage
When having two keys that start with the same characters and the second key just has one character more nand_tffs_read and tffs_read return the wrong value for the longer key. This is due to the usage of strncmp in combination with the length of the shorter key which is usually first in the list before the longer key and when strncmp matches, the search is stopped. The problem only occurs when the length of the two keys is different, not if just the last character is different. The fix is to use strcmp and as such it will only return the value if the key (name) and the key to look for (namefilter) have the same value and length. A sample case returning wrong values is when keys macwlan and macwlan2 are defined and querying macwlan2 returns the value for macwlan. Signed-off-by: Daniel Kestrel <kestrel1974@t-online.de>
This commit is contained in:
parent
97d88b1fbd
commit
12564c5b86
@ -340,7 +340,7 @@ static int show_matching_key_value(struct tffs_key_name_table *key_names)
|
||||
for (uint32_t i = 0; i < key_names->size; i++) {
|
||||
name = key_names->entries[i].val;
|
||||
|
||||
if (strncmp(name, name_filter, strlen(name)) == 0) {
|
||||
if (strcmp(name, name_filter) == 0) {
|
||||
if (find_entry(key_names->entries[i].id, &tmp)) {
|
||||
print_entry_value(&tmp);
|
||||
printf("\n");
|
||||
|
@ -204,7 +204,7 @@ static int show_matching_key_value(uint8_t *buffer,
|
||||
for (i = 0; i < key_names->size; i++) {
|
||||
name = key_names->entries[i].val;
|
||||
|
||||
if (strncmp(name, name_filter, strlen(name)) == 0) {
|
||||
if (strcmp(name, name_filter) == 0) {
|
||||
id = to_entry_header_id(*key_names->entries[i].id);
|
||||
|
||||
if (find_entry(buffer, id, &tmp)) {
|
||||
|
Loading…
Reference in New Issue
Block a user