add_shm_format: check wl_array_add return value before deref

In wl_display_add_shm_format(), check the return value from
wl_array_add() before dereferencing it and assigning it a value.
Return the resulting pointer back to the caller.

Signed-off-by: U. Artie Eoff <ullysses.a.eoff@intel.com>
This commit is contained in:
U. Artie Eoff 2014-01-14 09:18:03 -08:00 committed by Kristian Høgsberg
parent 02952d040c
commit 32b2baaf51
2 changed files with 11 additions and 5 deletions

View file

@ -1317,25 +1317,31 @@ wl_display_remove_global(struct wl_display *display, struct wl_global *global)
* *
* \param display The display object * \param display The display object
* \param format The wl_shm pixel format to advertise * \param format The wl_shm pixel format to advertise
* \return A pointer to the wl_shm format that was added to the list
* or NULL if adding it to the list failed.
* *
* Add the specified wl_shm format to the list of formats the wl_shm * Add the specified wl_shm format to the list of formats the wl_shm
* object advertises when a client binds to it. Adding a format to * object advertises when a client binds to it. Adding a format to
* the list means that clients will know that the compositor supports * the list means that clients will know that the compositor supports
* this format and may use it for creating wl_shm buffers. The * this format and may use it for creating wl_shm buffers. The
* compositor must be able to handle the pixel format when a client * compositor must be able to handle the pixel format when a client
* requests it.
* *
* The compositor by default supports WL_SHM_FORMAT_ARGB8888 and * The compositor by default supports WL_SHM_FORMAT_ARGB8888 and
* WL_SHM_FORMAT_XRGB8888. * WL_SHM_FORMAT_XRGB8888.
* *
* \memberof wl_display * \memberof wl_display
*/ */
WL_EXPORT void WL_EXPORT uint32_t *
wl_display_add_shm_format(struct wl_display *display, uint32_t format) wl_display_add_shm_format(struct wl_display *display, uint32_t format)
{ {
uint32_t *p; uint32_t *p = NULL;
p = wl_array_add(&display->additional_shm_formats, sizeof *p); p = wl_array_add(&display->additional_shm_formats, sizeof *p);
if (p != NULL)
*p = format; *p = format;
return p;
} }
/** /**

View file

@ -439,7 +439,7 @@ wl_shm_buffer_get_height(struct wl_shm_buffer *buffer);
int int
wl_display_init_shm(struct wl_display *display); wl_display_init_shm(struct wl_display *display);
void uint32_t *
wl_display_add_shm_format(struct wl_display *display, uint32_t format); wl_display_add_shm_format(struct wl_display *display, uint32_t format);
struct wl_shm_buffer * struct wl_shm_buffer *