pod: also check 0 terminted strings in copy_string

Use get_string() to get a pointer to the string in the pod so that we
also check if it has a 0 terminator.

Fix the test case now that is_string returns true even for non
zero-terminated strings.
This commit is contained in:
Wim Taymans 2025-07-25 17:31:42 +02:00
parent b991e9acc9
commit 87333537d2
2 changed files with 2 additions and 4 deletions

View file

@ -297,10 +297,8 @@ SPA_API_POD_ITER int spa_pod_get_string(const struct spa_pod *pod, const char **
SPA_API_POD_ITER int spa_pod_copy_string(const struct spa_pod *pod, size_t maxlen, char *dest) SPA_API_POD_ITER int spa_pod_copy_string(const struct spa_pod *pod, size_t maxlen, char *dest)
{ {
const char *s; const char *s;
if (!spa_pod_is_string(pod) || maxlen < 1) if (spa_pod_get_string(pod, &s) < 0 || maxlen < 1)
return -EINVAL; return -EINVAL;
maxlen = SPA_MIN(maxlen, pod->size);
s = (const char *)SPA_POD_CONTENTS(struct spa_pod_string, pod);
strncpy(dest, s, maxlen-1); strncpy(dest, s, maxlen-1);
dest[maxlen-1]= '\0'; dest[maxlen-1]= '\0';
return 0; return 0;

View file

@ -286,7 +286,7 @@ PWTEST(pod_init)
spa_assert_se(SPA_POD_SIZE(&pod) == 14); spa_assert_se(SPA_POD_SIZE(&pod) == 14);
spa_assert_se(SPA_POD_TYPE(&pod) == SPA_TYPE_String); spa_assert_se(SPA_POD_TYPE(&pod) == SPA_TYPE_String);
spa_assert_se(SPA_POD_BODY_SIZE(&pod) == 6); spa_assert_se(SPA_POD_BODY_SIZE(&pod) == 6);
spa_assert_se(!spa_pod_is_string(&pod.pod.pod)); spa_assert_se(spa_pod_is_string(&pod.pod.pod));
spa_assert_se(spa_pod_copy_string(&pod.pod.pod, sizeof(val), val) < 0); spa_assert_se(spa_pod_copy_string(&pod.pod.pod, sizeof(val), val) < 0);
} }
{ {