*
*/
static size_t command_normalise_attribute(command_result_t *result, command_file_ctx_t *cc,
- char *data, UNUSED size_t data_used, char *in, UNUSED size_t inlen)
+ char *data, UNUSED size_t data_used, char *in, size_t inlen)
{
fr_pair_list_t head;
ssize_t slen;
fr_pair_list_init(&head);
- if (fr_pair_list_afrom_str(NULL, cc->tmpl_rules.dict_def ? cc->tmpl_rules.dict_def : cc->config->dict, in, &head) != T_EOL) {
+ if (fr_pair_list_afrom_str(NULL, cc->tmpl_rules.dict_def ? cc->tmpl_rules.dict_def : cc->config->dict, in, inlen, &head) != T_EOL) {
RETURN_OK_WITH_ERROR();
}
}
static size_t command_encode_pair(command_result_t *result, command_file_ctx_t *cc,
- char *data, UNUSED size_t data_used, char *in, UNUSED size_t inlen)
+ char *data, UNUSED size_t data_used, char *in, size_t inlen)
{
fr_test_point_pair_encode_t *tp = NULL;
}
if (fr_pair_list_afrom_str(cc->tmp_ctx, cc->tmpl_rules.dict_def ? cc->tmpl_rules.dict_def : cc->config->dict,
- p, &head) != T_EOL) {
+ p, in + inlen - p, &head) != T_EOL) {
CLEAR_TEST_POINT(cc);
RETURN_OK_WITH_ERROR();
}
}
static size_t command_encode_proto(command_result_t *result, command_file_ctx_t *cc,
- char *data, UNUSED size_t data_used, char *in, UNUSED size_t inlen)
+ char *data, UNUSED size_t data_used, char *in, size_t inlen)
{
fr_test_point_proto_encode_t *tp = NULL;
}
if (fr_pair_list_afrom_str(cc->tmp_ctx, cc->tmpl_rules.dict_def ? cc->tmpl_rules.dict_def : cc->config->dict,
- p, &head) != T_EOL) {
+ p, in + inlen - p, &head) != T_EOL) {
CLEAR_TEST_POINT(cc);
RETURN_OK_WITH_ERROR();
}
* @param[in] ctx for talloc
* @param[in] parent parent to start referencing from
* @param[in] buffer to read valuepairs from.
+ * @param[in] end end of the buffer
* @param[in] list where the parsed fr_pair_ts will be appended.
* @param[in,out] token The last token we parsed
* @param[in] depth the nesting depth for FR_TYPE_GROUP
* - <= 0 on failure.
* - The number of bytes of name consumed on success.
*/
-static ssize_t fr_pair_list_afrom_substr(TALLOC_CTX *ctx, fr_dict_attr_t const *parent, char const *buffer,
+static ssize_t fr_pair_list_afrom_substr(TALLOC_CTX *ctx, fr_dict_attr_t const *parent, char const *buffer, char const *end,
fr_pair_list_t *list, fr_token_t *token, int depth, fr_pair_t **relative_vp)
{
fr_pair_list_t tmp_list;
}
slen = fr_dict_attr_by_oid_substr(NULL, &da, (*relative_vp)->da,
- &FR_SBUFF_IN(p, strlen(p)), &bareword_terminals);
+ &FR_SBUFF_IN(p, (end - p)), &bareword_terminals);
if (slen <= 0) goto error;
my_list = &(*relative_vp)->vp_group;
* Parse the name.
*/
slen = fr_dict_attr_by_oid_substr(NULL, &da, parent,
- &FR_SBUFF_IN(p, strlen(p)), &bareword_terminals);
+ &FR_SBUFF_IN(p, (end - p)), &bareword_terminals);
if ((slen <= 0) && internal) {
slen = fr_dict_attr_by_oid_substr(NULL, &da, internal,
- &FR_SBUFF_IN(p, strlen(p)), &bareword_terminals);
+ &FR_SBUFF_IN(p, (end - p)), &bareword_terminals);
}
if (slen <= 0) {
do_unknown:
slen = fr_dict_unknown_afrom_oid_substr(ctx, NULL, &da_unknown, parent,
- &FR_SBUFF_IN(p, strlen(p)), &bareword_terminals);
+ &FR_SBUFF_IN(p, (end - p)), &bareword_terminals);
if (slen <= 0) {
p += -slen;
* other, and not to our parent relative VP.
*/
my_relative_vp = NULL;
- slen = fr_pair_list_afrom_substr(vp, vp->da, p, &vp->vp_group, &last_token, depth + 1, &my_relative_vp);
+ slen = fr_pair_list_afrom_substr(vp, vp->da, p, end, &vp->vp_group, &last_token, depth + 1, &my_relative_vp);
if (slen <= 0) {
talloc_free(vp);
goto error;
* @param[in] ctx for talloc
* @param[in] dict to resolve attributes in.
* @param[in] buffer to read valuepairs from.
+ * @param[in] len length of the buffer
* @param[in] list where the parsed fr_pair_ts will be appended.
* @return the last token parsed, or #T_INVALID
*/
-fr_token_t fr_pair_list_afrom_str(TALLOC_CTX *ctx, fr_dict_t const *dict, char const *buffer, fr_pair_list_t *list)
+fr_token_t fr_pair_list_afrom_str(TALLOC_CTX *ctx, fr_dict_t const *dict, char const *buffer, size_t len, fr_pair_list_t *list)
{
fr_token_t token;
fr_pair_t *relative_vp = NULL;
- (void) fr_pair_list_afrom_substr(ctx, fr_dict_root(dict), buffer, list, &token, 0, &relative_vp);
+ (void) fr_pair_list_afrom_substr(ctx, fr_dict_root(dict), buffer, buffer + len, list, &token, 0, &relative_vp);
return token;
}
/*
* Call our internal function, instead of the public wrapper.
*/
- if (fr_pair_list_afrom_substr(ctx, fr_dict_root(dict), buf, &tmp_list, &last_token, 0, &relative_vp) < 0) {
+ if (fr_pair_list_afrom_substr(ctx, fr_dict_root(dict), buf, buf + sizeof(buf), &tmp_list, &last_token, 0, &relative_vp) < 0) {
goto fail;
}