Yi EungJun [off-list ref] writes:
+static void write_accept_language(struct strbuf *buf)
+{
+ /*
+ * MAX_DECIMAL_PLACES must not be larger than 3. If it is larger than
+ * that, q-value will be smaller than 0.001, the minimum q-value the
+ * HTTP specification allows. See
+ * http://tools.ietf.org/html/rfc7231#section-5.3.1 for q-value.
+ */
+ const int MAX_DECIMAL_PLACES = 3;
+ const int MAX_LANGUAGE_TAGS = 1000;
+ const int MAX_ACCEPT_LANGUAGE_HEADER_SIZE = 4000;
+ struct strbuf *language_tags = NULL;
+ int num_langs;
No initial value given to this variable, but...
+ const char *s = get_preferred_languages();
+
+ /* Don't add Accept-Language header if no language is preferred. */
+ if (!s)
+ return;
+
+ /*
+ * Split the colon-separated string of preferred languages into
+ * language_tags array.
+ */
+ do {
+ /* increase language_tags array to add new language tag */
+ REALLOC_ARRAY(language_tags, num_langs + 1);
... it is nevertheless used. I think it was meant to start at 0?
+ /* write Accept-Language header into buf */
+ if (num_langs >= 1) {
+ int i;
+ int last_buf_len;
This is uninitialized...
+ int max_q;
+ int decimal_places;
+ char q_format[32];
+
+...
+ if (buf->len > MAX_ACCEPT_LANGUAGE_HEADER_SIZE) {
+ strbuf_remove(buf, last_buf_len, buf->len - last_buf_len);
... and then it is used here.