vss: Avoid use after free in vss_send().
[paraslash.git] / filter_common.c
index 099d056ef1514e2f606adf30d779308b58bead95..e9b97e54633a8770009c0f746b7daa712d4135fb 100644 (file)
 /** The array of supported filters. */
 static struct filter filters[NUM_SUPPORTED_FILTERS] = {FILTER_ARRAY};
 
+/**
+ * Obtain a reference to a filter structure.
+ *
+ * \param filter_num Between zero and NUM_SUPPORTED_FILTERS, inclusively.
+ *
+ * \return Pointer to the filter identified by the given filter number.
+ *
+ * It is a fatal error if the given number is out of range. In this case
+ * the function aborts.
+ */
 const struct filter *filter_get(int filter_num)
 {
        assert(filter_num >= 0);
@@ -48,7 +58,7 @@ void filter_init(void)
  * If the filter has a command line parser and options is not NULL, run it.
  * Returns filter_num on success, negative on errors
  */
-static int parse_filter_args(int filter_num, char *options, void **conf)
+static int parse_filter_args(int filter_num, const char *options, void **conf)
 {
        const struct filter *f = filter_get(filter_num);
        int ret, argc;
@@ -68,11 +78,12 @@ static int parse_filter_args(int filter_num, char *options, void **conf)
 /**
  * Check the filter command line options.
  *
- * \param fa The command line options.
+ * \param fa The filter argument.
  * \param conf Points to the filter configuration upon successful return.
  *
- * Check if \a fa starts with a the name of a supported filter, followed by
- * a colon. If yes, call the command line parser of that filter.
+ * Check if the given filter argument starts with the name of a supported
+ * filter, optionally followed by options for this filter. If yes, call the
+ * command line parser of that filter.
  *
  * \return On success, the number of the filter is returned and \a conf
  * is initialized to point to the filter configuration determined by \a fa.
@@ -83,7 +94,7 @@ static int parse_filter_args(int filter_num, char *options, void **conf)
  *
  * \sa filter::parse_config
  */
-int check_filter_arg(char *fa, void **conf)
+int check_filter_arg(const char *fa, void **conf)
 {
        int j;
 
@@ -193,7 +204,7 @@ int decoder_execute(const char *cmd, unsigned sample_rate, unsigned channels,
                return 1;
        }
        if (!strcmp(cmd, "sample_format")) {
-               *result = make_message("%u", DECODER_SAMPLE_FORMAT);
+               *result = make_message("%d", DECODER_SAMPLE_FORMAT);
                return 1;
        }
        return -ERRNO_TO_PARA_ERROR(ENOTSUP);