[Asterisk-cvs] asterisk frame.c,1.54,1.55

kpfleming at lists.digium.com kpfleming at lists.digium.com
Sun May 15 01:41:05 CDT 2005


Update of /usr/cvsroot/asterisk
In directory mongoose.digium.com:/tmp/cvs-serv1831

Modified Files:
	frame.c 
Log Message:
minor cleanups (bug #4158)


Index: frame.c
===================================================================
RCS file: /usr/cvsroot/asterisk/frame.c,v
retrieving revision 1.54
retrieving revision 1.55
diff -u -d -r1.54 -r1.55
--- frame.c	15 May 2005 03:03:48 -0000	1.54
+++ frame.c	15 May 2005 05:46:34 -0000	1.55
@@ -259,6 +259,11 @@
 	}
 }
 
+/*
+ * 'isolates' a frame by duplicating non-malloc'ed components
+ * (header, src, data).
+ * On return all components are malloc'ed
+ */
 struct ast_frame *ast_frisolate(struct ast_frame *fr)
 {
 	struct ast_frame *out;
@@ -271,11 +276,11 @@
 		}
 		out->frametype = fr->frametype;
 		out->subclass = fr->subclass;
-		out->datalen = 0;
+		out->datalen = fr->datalen;
 		out->samples = fr->samples;
-		out->offset = 0;
+		out->offset = fr->offset;
 		out->src = NULL;
-		out->data = NULL;
+		out->data = fr->data;
 	} else {
 		out = fr;
 	}
@@ -308,6 +313,10 @@
 	/* Start with standard stuff */
 	len = sizeof(struct ast_frame) + AST_FRIENDLY_OFFSET + f->datalen;
 	/* If we have a source, add space for it */
+	/*
+	 * XXX Watch out here - if we receive a src which is not terminated
+	 * properly, we can be easily attacked. Should limit the size we deal with.
+	 */
 	if (f->src)
 		srclen = strlen(f->src);
 	if (srclen > 0)
@@ -338,6 +347,13 @@
 	return out;
 }
 
+#if 0
+/*
+ * XXX
+ * This function is badly broken - it does not handle correctly
+ * partial reads on either header or body.
+ * However is it never used anywhere so we leave it commented out
+ */
 struct ast_frame *ast_fr_fdread(int fd)
 {
 	char buf[65536];
@@ -386,6 +402,11 @@
 /* Some convenient routines for sending frames to/from stream or datagram
    sockets, pipes, etc (maybe even files) */
 
+/*
+ * XXX this function is also partly broken because it does not handle
+ * partial writes. We comment it out too, and also the unique
+ * client it has, ast_fr_fdhangup()
+ */
 int ast_fr_fdwrite(int fd, struct ast_frame *frame)
 {
 	/* Write the frame exactly */
@@ -409,6 +430,7 @@
 	return ast_fr_fdwrite(fd, &hangup);
 }
 
+#endif /* unused functions */
 void ast_swapcopy_samples(void *dst, const void *src, int samples)
 {
 	int i;




More information about the svn-commits mailing list