@@ -31,7 +31,9 @@ struct test_mem_cfg
3131 char filename [32 ];
3232};
3333
34- static struct info_mm g_disp_mm [10 ];
34+ #define DISP_MEM_COUNT 10
35+
36+ static struct info_mm g_disp_mm [DISP_MEM_COUNT ];
3537static int g_disp_mem_id = -1 ;
3638
3739#define DISP_TEST_BYTE_ALIGN (x ) (((x + (4*1024-1)) >> 12) << 12)
@@ -72,6 +74,11 @@ static void disp_free(void *virt_addr, void *phys_addr, u32 num_bytes)
7274
7375static int disp_mem_release (int sel )
7476{
77+ if (sel < 0 || sel >= DISP_MEM_COUNT )
78+ {
79+ return -1 ;
80+ }
81+
7582 if (g_disp_mm [sel ].info_base == NULL )
7683 return -1 ;
7784
@@ -89,8 +96,9 @@ static int disp_mem_request(int sel, u32 size)
8996
9097 uintptr_t phy_addr ;
9198
92- if ((sel >= 10 ) ||
93- (g_disp_mm [sel ].info_base != NULL )) {
99+ if ((sel < 0 ) || (sel >= DISP_MEM_COUNT ) ||
100+ (g_disp_mm [sel ].info_base != NULL ))
101+ {
94102 printf ("invalid param\n" );
95103 return -1 ;
96104 }
@@ -115,8 +123,10 @@ static int disp_mem_request(int sel, u32 size)
115123
116124u32 disp_mem_getadr (u32 memid )
117125{
118- if (memid < 10 )
126+ if (memid < DISP_MEM_COUNT )
127+ {
119128 return g_disp_mm [memid ].mem_start ;
129+ }
120130 return 0 ;
121131}
122132
@@ -129,17 +139,31 @@ int disp_mem(u32 mem_id, u32 width, u32 height, u32 clear_flag, char *filename)
129139 void * mem = NULL ;
130140 unsigned long count = width * height ;
131141 char * tmp ;
142+
143+ if (mem_id >= DISP_MEM_COUNT )
144+ {
145+ printf ("invalid mem_id\n" );
146+ return -1 ;
147+ }
148+
132149 if (clear_flag ) {
133150 /* release memory && clear layer */
134151 disp_mem_release (mem_id );
135152 return 0 ;
136153 }
137154
155+ if (filename == NULL )
156+ {
157+ printf ("filename is null.\n" );
158+ goto OUT ;
159+ }
160+
138161 //for_test we use r g b to set color buffer
139- if (filename [0 ] != 'r' && filename [0 ] != 'g' && filename [0 ] != 'b' ) {
140- if (filename != NULL )
141- fh = fopen (filename , "r" );
142- if (!fh ) {
162+ if (filename [0 ] != 'r' && filename [0 ] != 'g' && filename [0 ] != 'b' )
163+ {
164+ fh = fopen (filename , "r" );
165+ if (!fh )
166+ {
143167 printf ("open file %s fail. \n" , filename );
144168 goto OUT ;
145169 }
@@ -222,9 +246,16 @@ int parse_cmdline_and_alloc(int argc, char **argv)
222246 if ( ! strcmp (argv [i ], "-file" )) {
223247 if (argc > i + 1 ) {
224248 i ++ ;
225- p -> filename [0 ] = '\0' ;
226- sprintf (p -> filename ,"%s" ,argv [i ]);
227- printf ("filename=%s\n" , argv [i ]);
249+ if (rt_strlen (argv [i ]) >= sizeof (p -> filename ))
250+ {
251+ printf ("filename is too long!!\n" );
252+ err ++ ;
253+ }
254+ else
255+ {
256+ rt_strncpy (p -> filename , argv [i ], sizeof (p -> filename ));
257+ printf ("filename=%s\n" , argv [i ]);
258+ }
228259 } else {
229260 printf ("no file described!!\n" );
230261 err ++ ;
@@ -254,6 +285,12 @@ int parse_cmdline_and_alloc(int argc, char **argv)
254285 i ++ ;
255286 }
256287
288+ if (p -> mem_id < 0 || p -> mem_id >= DISP_MEM_COUNT )
289+ {
290+ printf ("mem_id para error!\n" );
291+ err ++ ;
292+ }
293+
257294 if (err > 0 ) {
258295 printf ("example : ./disp_mem -mem_id 0 -size 1280 800 -double 0 -file ./pic/ui_1280x800_double_151.bin\n" );
259296 return -1 ;
@@ -264,5 +301,4 @@ int parse_cmdline_and_alloc(int argc, char **argv)
264301 }
265302}
266303
267- FINSH_FUNCTION_EXPORT_ALIAS (parse_cmdline_and_alloc , disp_mem , disp mem );
268-
304+ MSH_CMD_EXPORT_ALIAS (parse_cmdline_and_alloc , disp_mem , disp mem );
0 commit comments