(u)->modseq_inc_flag == 0)
#define MAIL_INDEX_EXT_KEYWORDS "keywords"
+#define MAIL_INDEX_EXT_NAME_MAX_LENGTH 64
typedef int mail_index_expunge_handler_t(struct mail_index_sync_map_ctx *ctx,
const void *data, void **sync_context);
bool mail_index_map_lookup_ext(struct mail_index_map *map, const char *name,
uint32_t *idx_r);
+bool mail_index_ext_name_is_valid(const char *name);
uint32_t
mail_index_map_register_ext(struct mail_index_map *map,
const char *name, uint32_t ext_offset,
#include <stddef.h>
#include <time.h>
#include <sys/stat.h>
+#include <ctype.h>
struct mail_index_module_register mail_index_module_register = { 0 };
memcpy(index->set.ext_hdr_init_data, data, size);
}
+bool mail_index_ext_name_is_valid(const char *name)
+{
+ size_t i;
+
+ for (i = 0; name[i] != '\0'; i++) {
+ if (!i_isalnum(name[i]) && name[i] != '-' && name[i] != '_' &&
+ name[i] != ' ')
+ return FALSE;
+
+ }
+ return i == 0 || i < MAIL_INDEX_EXT_NAME_MAX_LENGTH;
+}
+
uint32_t mail_index_ext_register(struct mail_index *index, const char *name,
uint32_t default_hdr_size,
uint16_t default_record_size,
struct mail_index_registered_ext rext;
uint32_t ext_id;
- if (*name == '\0' || strcmp(name, str_sanitize(name, SIZE_MAX)) != 0)
+ if (!mail_index_ext_name_is_valid(name))
i_panic("mail_index_ext_register(%s): Invalid name", name);
if (default_record_size != 0 && default_record_align == 0) {