openbsd-ports/multimedia/xine-lib/patches/patch-src_input_libreal_asmrp_c
robert 900dc9bfe8 fix a buffer overflow found in the code used to handle RealMedia RTSP
streams; bump PKNAME;

from Brad <brad@comstyle.com>
2007-01-02 19:42:59 +00:00

58 lines
1.7 KiB
Plaintext

$OpenBSD: patch-src_input_libreal_asmrp_c,v 1.2 2007/01/02 19:42:59 robert Exp $
--- src/input/libreal/asmrp.c.orig Fri Aug 27 14:34:16 2004
+++ src/input/libreal/asmrp.c Mon Jan 1 15:27:04 2007
@@ -37,6 +37,7 @@
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
+#include "asmrp.h"
#define LOG_MODULE "asmrp"
#define LOG_VERBOSE
@@ -604,7 +605,7 @@ static int asmrp_rule (asmrp_t *p) {
return ret;
}
-static int asmrp_eval (asmrp_t *p, int *matches) {
+static int asmrp_eval (asmrp_t *p, int *matches, int matchsize) {
int rule_num, num_matches;
@@ -613,13 +614,15 @@ static int asmrp_eval (asmrp_t *p, int *
asmrp_get_sym (p);
rule_num = 0; num_matches = 0;
- while (p->sym != ASMRP_SYM_EOF) {
+ while (p->sym != ASMRP_SYM_EOF && num_matches < matchsize -1) {
if (asmrp_rule (p)) {
lprintf ("rule #%d is true\n", rule_num);
- matches[num_matches] = rule_num;
- num_matches++;
+ if(num_matches < MAX_RULEMATCHES - 1)
+ matches[num_matches++] = rule_num;
+ else
+ printf("Ignoring matched asm rule %d, too many matched rules.\n", rule_num);
}
rule_num++;
@@ -629,7 +632,7 @@ static int asmrp_eval (asmrp_t *p, int *
return num_matches;
}
-int asmrp_match (const char *rules, int bandwidth, int *matches) {
+int asmrp_match (const char *rules, int bandwidth, int *matches, int matchsize) {
asmrp_t *p;
int num_matches;
@@ -641,7 +644,7 @@ int asmrp_match (const char *rules, int
asmrp_set_id (p, "Bandwidth", bandwidth);
asmrp_set_id (p, "OldPNMPlayer", 0);
- num_matches = asmrp_eval (p, matches);
+ num_matches = asmrp_eval (p, matches, matchsize);
asmrp_dispose (p);