Messages in this thread | | | Date | Tue, 12 Oct 2010 10:56:05 +0100 | From | Mark Brown <> | Subject | Re: [patch] ASoC: soc: snprintf() doesn't return negative |
| |
On Tue, Oct 12, 2010 at 11:49:27AM +0200, Takashi Iwai wrote: > Mark Brown wrote:
> Argh, yes, I'm (again) confused by that behavior. > The problem is the potential buffer overflow, indeed. snprintf() > returns the size that would be printed. Thus a safe code would be > like: > > list_for_each_entry(dai, &dai_list, list) { > int len = snprintf(buf + ret, PAGE_SIZE - ret, "%s\n", dai->name); > if (len < 0) > continue; > ret += len; > if (ret >= PAGE_SIZE) { > ret = PAGE_SIZE; > break; > } > }
Yes, this form is better for that variant of the loop - that is safe and legible without relying on current implementation details of snprintf().
| |