1
0
mirror of https://gitlab.xiph.org/xiph/ezstream.git synced 2024-09-15 04:08:07 -04:00

Prefer SIGSEGV over SIGABRT in case of explicit internal API abuse

While here, declare some module-internal functions static.
This commit is contained in:
Moritz Grimm 2015-04-22 19:49:07 +02:00
parent 41058dac79
commit c6747ef998
3 changed files with 85 additions and 254 deletions

View File

@ -133,11 +133,6 @@ urlParse(const char *url, char **hostname, unsigned short *port,
size_t hostsiz, mountsiz;
const char *errstr;
if (hostname == NULL || port == NULL || mountname == NULL) {
log_alert("urlParse: bad arguments");
abort();
}
if (strncmp(url, "http://", strlen("http://")) != 0) {
log_error("invalid <url>: not an HTTP address");
return (0);
@ -385,11 +380,6 @@ getMetadataString(const char *format, metadata_t *mdata)
{
char *tmp, *str;
if (mdata == NULL) {
log_alert("getMetadataString: bad argument");
abort();
}
if (format == NULL)
return (NULL);
@ -457,11 +447,6 @@ setMetadata(shout_t *shout, metadata_t *mdata, char **mdata_copy)
const char *artist, *title;
int ret = SHOUTERR_SUCCESS;
if (shout == NULL) {
log_alert("setMetadata: bad argument");
abort();
}
if (cfg_no_metadata_updates())
return (SHOUTERR_SUCCESS);
@ -727,11 +712,6 @@ sendStream(shout_t *shout, FILE *filepstream, const char *fileName,
struct timeval timeStamp, *startTime = tv;
struct timeval callTime, currentTime;
if (startTime == NULL) {
log_alert("sendStream: bad argument");
abort();
}
ez_gettimeofday((void *)&callTime);
timeStamp.tv_sec = startTime->tv_sec;

View File

@ -30,6 +30,8 @@
#endif /* HAVE_VORBISFILE */
#include <shout/shout.h>
#include <assert.h>
#include "log.h"
#include "metadata.h"
#include "util.h"
@ -62,16 +64,16 @@ struct ID3Tag {
char genre;
};
metadata_t * metadata_create(const char *);
void metadata_use_taglib(metadata_t *, FILE **);
void metadata_use_self(metadata_t *, FILE **);
void metadata_clean_md(metadata_t *);
void metadata_get_extension(char *, size_t, const char *);
char * metadata_get_name(const char *);
void metadata_process_md(metadata_t *);
void metadata_normalize_string(char **);
static metadata_t * metadata_create(const char *);
static void metadata_use_taglib(metadata_t *, FILE **);
static void metadata_use_self(metadata_t *, FILE **);
static void metadata_clean_md(metadata_t *);
static void metadata_get_extension(char *, size_t, const char *);
static char * metadata_get_name(const char *);
static void metadata_process_md(metadata_t *);
static void metadata_normalize_string(char **);
metadata_t *
static metadata_t *
metadata_create(const char *filename)
{
metadata_t *md;
@ -83,7 +85,7 @@ metadata_create(const char *filename)
return (md);
}
void
static void
metadata_use_taglib(metadata_t *md, FILE **filep)
#ifdef HAVE_TAGLIB
{
@ -92,11 +94,6 @@ metadata_use_taglib(metadata_t *md, FILE **filep)
const TagLib_AudioProperties *ta;
char *str;
if (md == NULL || md->filename == NULL) {
log_alert("metadata_use_taglib: bad arguments");
abort();
}
if (filep != NULL)
fclose(*filep);
@ -149,7 +146,7 @@ metadata_use_taglib(metadata_t *md, FILE **filep)
}
#endif /* HAVE_TAGLIB */
void
static void
metadata_use_self(metadata_t *md, FILE **filep)
#ifdef HAVE_TAGLIB
{
@ -164,12 +161,6 @@ metadata_use_self(metadata_t *md, FILE **filep)
char extension[25];
struct ID3Tag id3tag;
if (md == NULL || filep == NULL || *filep == NULL ||
md->filename == NULL) {
log_alert("metadata_use_self: bad arguments");
abort();
}
metadata_clean_md(md);
metadata_get_extension(extension, sizeof(extension), md->filename);
@ -244,14 +235,9 @@ metadata_use_self(metadata_t *md, FILE **filep)
}
#endif /* HAVE_TAGLIB */
void
static void
metadata_clean_md(metadata_t *md)
{
if (md == NULL) {
log_alert("metadata_clean_md: bad argument");
abort();
}
if (md->string != NULL) {
xfree(md->string);
md->string = NULL;
@ -266,16 +252,11 @@ metadata_clean_md(metadata_t *md)
}
}
void
static void
metadata_get_extension(char *buf, size_t siz, const char *filename)
{
char *p;
if (buf == NULL || siz == 0 || filename == NULL) {
log_alert("metadata_get_extension: bad arguments");
abort();
}
if ((p = strrchr(filename, '.')) != NULL)
strlcpy(buf, p, siz);
else
@ -284,17 +265,12 @@ metadata_get_extension(char *buf, size_t siz, const char *filename)
*p = tolower((int)*p);
}
char *
static char *
metadata_get_name(const char *file)
{
char *filename = xstrdup(file);
char *p1, *p2, *name;
if (file == NULL) {
log_alert("metadata_get_name: bad arguments");
abort();
}
if ((p1 = basename(filename)) == NULL) {
log_alert("basename: unexpected failure with input: %s",
filename);
@ -313,14 +289,9 @@ metadata_get_name(const char *file)
return (name);
}
void
static void
metadata_process_md(metadata_t *md)
{
if (md == NULL) {
log_alert("metadata_process_md: bad arguments");
abort();
}
if (md->string == NULL)
md->string = metadata_assemble_string(md);
@ -331,7 +302,7 @@ metadata_process_md(metadata_t *md)
}
}
void
static void
metadata_normalize_string(char **s)
{
char *str, *cp, *tmpstr, *tp;
@ -367,11 +338,6 @@ metadata_file(const char *filename, int normalize)
{
metadata_t *md;
if (filename == NULL || strlen(filename) == 0) {
log_alert("metadata_file: bad arguments");
abort();
}
md = metadata_create(filename);
if (!metadata_file_update(md)) {
metadata_free(&md);
@ -393,11 +359,6 @@ metadata_program(const char *program, int normalize)
FILE *filep;
#endif
if (program == NULL || strlen(program) == 0) {
log_alert("metadata_program: bad arguments");
abort();
}
md = metadata_create(program);
md->program = 1;
md->string = xstrdup("");
@ -456,15 +417,7 @@ metadata_file_update(metadata_t *md)
{
FILE *filep;
if (md == NULL) {
log_alert("metadata_file_update: bad argument");
abort();
}
if (md->program) {
log_alert("metadata_file_update: called with program handle");
abort();
}
assert(!md->program);
if ((filep = fopen(md->filename, "rb")) == NULL) {
log_error("%s: %s", md->filename, strerror(errno));
@ -489,15 +442,7 @@ metadata_program_update(metadata_t *md, enum metadata_request md_req)
char buf[METADATA_MAX + 1];
char command[PATH_MAX + sizeof(" artist")];
if (md == NULL) {
log_alert("metadata_program_update: bad argument");
abort();
}
if (!md->program) {
log_alert("metadata_program_update: called with file handle");
abort();
}
assert(md->program);
switch (md_req) {
case METADATA_ALL:
@ -600,27 +545,13 @@ metadata_program_update(metadata_t *md, enum metadata_request md_req)
const char *
metadata_get_string(metadata_t *md)
{
if (md == NULL) {
log_alert("metadata_get_string: bad argument");
abort();
}
if (md->string == NULL) {
log_alert("metadata_get_string: md->string is NULL");
abort();
}
assert(md->string);
return (md->string);
}
const char *
metadata_get_artist(metadata_t *md)
{
if (md == NULL) {
log_alert("metadata_get_artist: bad argument");
abort();
}
if (md->artist == NULL)
return (blankString);
else
@ -630,11 +561,6 @@ metadata_get_artist(metadata_t *md)
const char *
metadata_get_title(metadata_t *md)
{
if (md == NULL) {
log_alert("metadata_get_title: bad argument");
abort();
}
if (md->title == NULL)
return (blankString);
else
@ -644,11 +570,6 @@ metadata_get_title(metadata_t *md)
const char *
metadata_get_filename(metadata_t *md)
{
if (md == NULL) {
log_alert("metadata_get_filename: bad argument");
abort();
}
if (md->filename == NULL)
/* Should never happen: */
return (blankString);
@ -659,11 +580,6 @@ metadata_get_filename(metadata_t *md)
int
metadata_get_length(metadata_t *md)
{
if (md == NULL) {
log_alert("metadata_get_length: bad argument");
abort();
}
return (md->songLen);
}
@ -673,11 +589,6 @@ metadata_assemble_string(metadata_t *md)
size_t len;
char *str;
if (md == NULL) {
log_alert("metadata_assemble_string: bad argument");
abort();
}
if (md->artist == NULL && md->title == NULL && md->program == 0)
return (metadata_get_name(md->filename));

View File

@ -39,12 +39,12 @@ struct playlist {
char *prog_track;
};
playlist_t * playlist_create(const char *);
int playlist_add(playlist_t *, const char *);
unsigned int playlist_random(void);
const char * playlist_run_program(playlist_t *);
static playlist_t * playlist_create(const char *);
static int playlist_add(playlist_t *, const char *);
static unsigned int playlist_random(void);
static const char * playlist_run_program(playlist_t *);
playlist_t *
static playlist_t *
playlist_create(const char *filename)
{
playlist_t *pl;
@ -55,16 +55,11 @@ playlist_create(const char *filename)
return (pl);
}
int
static int
playlist_add(playlist_t *pl, const char *entry)
{
size_t num;
if (pl == NULL || entry == NULL) {
log_alert("playlist_add: bad arguments");
abort();
}
num = pl->num + 1;
if (pl->size == 0) {
@ -88,7 +83,7 @@ playlist_add(playlist_t *pl, const char *entry)
return (1);
}
unsigned int
static unsigned int
playlist_random(void)
{
unsigned int ret = 0;
@ -104,6 +99,63 @@ playlist_random(void)
return (ret);
}
static const char *
playlist_run_program(playlist_t *pl)
{
FILE *filep;
char buf[PATH_MAX];
if (!pl->program)
return (NULL);
fflush(NULL);
errno = 0;
log_debug("running command: %s", pl->filename);
if ((filep = popen(pl->filename, "r")) == NULL) {
/* popen() does not set errno reliably ... */
if (errno)
log_error("execution error: %s: %s", pl->filename,
strerror(errno));
else
log_error("execution error: %s", pl->filename);
return (NULL);
}
if (fgets(buf, (int)sizeof(buf), filep) == NULL) {
int errnum = errno;
pclose(filep);
if (ferror(filep)) {
log_alert("%s: output read error: %s", pl->filename,
strerror(errnum));
exit(1);
}
/* No output (end of playlist.) */
return (NULL);
}
pclose(filep);
if (strlen(buf) == sizeof(buf) - 1) {
log_error("%s: output too long", pl->filename);
return (NULL);
}
buf[strcspn(buf, "\n")] = '\0';
buf[strcspn(buf, "\r")] = '\0';
if (buf[0] == '\0')
/* Empty line (end of playlist.) */
return (NULL);
if (pl->prog_track != NULL)
xfree(pl->prog_track);
pl->prog_track = xstrdup(buf);
return ((const char *)pl->prog_track);
}
void
playlist_init(void)
{
@ -279,11 +331,6 @@ playlist_free(playlist_t **pl_p)
const char *
playlist_get_next(playlist_t *pl)
{
if (pl == NULL) {
log_alert("playlist_get_next: bad argument");
abort();
}
if (pl->program)
return (playlist_run_program(pl));
@ -296,11 +343,6 @@ playlist_get_next(playlist_t *pl)
const char *
playlist_peek_next(playlist_t *pl)
{
if (pl == NULL) {
log_alert("playlist_peek_next: bad argument");
abort();
}
if (pl->program || pl->num == 0)
return (NULL);
@ -310,11 +352,6 @@ playlist_peek_next(playlist_t *pl)
void
playlist_skip_next(playlist_t *pl)
{
if (pl == NULL) {
log_alert("playlist_skip_next: bad argument");
abort();
}
if (pl->program || pl->num == 0)
return;
@ -325,11 +362,6 @@ playlist_skip_next(playlist_t *pl)
unsigned long
playlist_get_num_items(playlist_t *pl)
{
if (pl == NULL) {
log_alert("playlist_get_position: bad argument");
abort();
}
if (pl->program)
return (0);
@ -339,11 +371,6 @@ playlist_get_num_items(playlist_t *pl)
unsigned long
playlist_get_position(playlist_t *pl)
{
if (pl == NULL) {
log_alert("playlist_get_position: bad argument");
abort();
}
if (pl->program)
return (0);
@ -353,11 +380,6 @@ playlist_get_position(playlist_t *pl)
int
playlist_set_position(playlist_t *pl, unsigned long idx)
{
if (pl == NULL) {
log_alert("playlist_set_position: bad argument");
abort();
}
if (pl->program || idx > pl->num - 1)
return (0);
@ -371,11 +393,6 @@ playlist_goto_entry(playlist_t *pl, const char *entry)
{
unsigned long i;
if (pl == NULL || entry == NULL) {
log_alert("playlist_goto_entry: bad arguments");
abort();
}
if (pl->program)
return (0);
@ -392,11 +409,6 @@ playlist_goto_entry(playlist_t *pl, const char *entry)
void
playlist_rewind(playlist_t *pl)
{
if (pl == NULL) {
log_alert("playlist_rewind: bad argument");
abort();
}
if (pl->program)
return;
@ -408,11 +420,6 @@ playlist_reread(playlist_t **plist)
{
playlist_t *new_pl, *pl;
if (plist == NULL || *plist == NULL) {
log_alert("playlist_reread: bad argument");
abort();
}
pl = *plist;
if (pl->program)
@ -436,11 +443,6 @@ playlist_shuffle(playlist_t *pl)
size_t d, i, range;
char *temp;
if (pl == NULL) {
log_alert("playlist_shuffle: bad argument");
abort();
}
if (pl->program || pl->num < 2)
return;
@ -466,65 +468,3 @@ playlist_shuffle(playlist_t *pl)
pl->list[i] = temp;
}
}
const char *
playlist_run_program(playlist_t *pl)
{
FILE *filep;
char buf[PATH_MAX];
if (pl == NULL) {
log_alert("playlist_run_program: bad argument");
abort();
}
if (!pl->program)
return (NULL);
fflush(NULL);
errno = 0;
log_debug("running command: %s", pl->filename);
if ((filep = popen(pl->filename, "r")) == NULL) {
/* popen() does not set errno reliably ... */
if (errno)
log_error("execution error: %s: %s", pl->filename,
strerror(errno));
else
log_error("execution error: %s", pl->filename);
return (NULL);
}
if (fgets(buf, (int)sizeof(buf), filep) == NULL) {
int errnum = errno;
pclose(filep);
if (ferror(filep)) {
log_alert("%s: output read error: %s", pl->filename,
strerror(errnum));
exit(1);
}
/* No output (end of playlist.) */
return (NULL);
}
pclose(filep);
if (strlen(buf) == sizeof(buf) - 1) {
log_error("%s: output too long", pl->filename);
return (NULL);
}
buf[strcspn(buf, "\n")] = '\0';
buf[strcspn(buf, "\r")] = '\0';
if (buf[0] == '\0')
/* Empty line (end of playlist.) */
return (NULL);
if (pl->prog_track != NULL)
xfree(pl->prog_track);
pl->prog_track = xstrdup(buf);
return ((const char *)pl->prog_track);
}