fix crash if a musicbrainz query returns null, e.g.  if musicbrainz.org
cannot be resolved. from upstream SVN.

$OpenBSD: patch-src_mb_c_cpp,v 1.1 2009/02/05 12:21:56 sthen Exp $
--- src/mb_c.cpp.orig	Thu Feb  5 13:17:20 2009
+++ src/mb_c.cpp	Thu Feb  5 13:17:54 2009
@@ -214,28 +214,48 @@ MbArtist
 mb_query_get_artist_by_id(MbQuery q, const char *id, MbArtistIncludes inc)
 {
 	Query *query = (Query *)q;
-	return (MbArtist)query->getArtistById(id, (ArtistIncludes *)inc);
+	try {
+		return (MbArtist)query->getArtistById(id, (ArtistIncludes *)inc);
+	}
+	catch (...) {
+		return NULL;
+	}
 }
 
 MbRelease
 mb_query_get_release_by_id(MbQuery q, const char *id, MbReleaseIncludes inc)
 {
 	Query *query = (Query *)q;
-	return (MbRelease)query->getReleaseById(id, (ReleaseIncludes *)inc);
+	try {
+		return (MbRelease)query->getReleaseById(id, (ReleaseIncludes *)inc);
+	}
+	catch (...) {
+		return NULL;
+	}
 }
 
 MbTrack
 mb_query_get_track_by_id(MbQuery q, const char *id, MbTrackIncludes inc)
 {
 	Query *query = (Query *)q;
-	return (MbTrack)query->getTrackById(id, (TrackIncludes *)inc);
+	try {
+		return (MbTrack)query->getTrackById(id, (TrackIncludes *)inc);
+	}
+	catch (...) {
+		return NULL;
+	}
 }
 
 MbUser
 mb_query_get_user_by_name(MbQuery q, const char *name)
 {
 	Query *query = (Query *)q;
-	return (MbUser)query->getUserByName(name);
+	try {
+		return (MbUser)query->getUserByName(name);
+	}
+	catch (...) {
+		return NULL;
+	}
 }
 
 void
@@ -247,55 +267,95 @@ mb_result_list_free(MbResultList list)
 int
 mb_result_list_get_size(MbResultList list)
 {
-    return ((ResultList *)list)->size();
+	try {
+		return ((ResultList *)list)->size();
+	}
+	catch (...) {
+		return 0;
+	}
 }
 
 int
 mb_result_list_get_score(MbResultList list, int index)
 {
-    return (*((ResultList *)list))[index]->getScore();
+	try {
+		return (*((ResultList *)list))[index]->getScore();
+	}
+	catch (...) {
+		return 0;
+	}
 }
 
 MbArtist
 mb_result_list_get_artist(MbResultList list, int index)
 {
-    return (MbArtist)(*((ArtistResultList *)list))[index]->getArtist();
+	try {
+		return (MbArtist)(*((ArtistResultList *)list))[index]->getArtist();
+	}
+	catch (...) {
+		return NULL;
+	}
 }
 
 MbRelease
 mb_result_list_get_release(MbResultList list, int index)
 {
-    return (*((ReleaseResultList *)list))[index]->getRelease();
+	try {
+		return (*((ReleaseResultList *)list))[index]->getRelease();
+	}
+	catch (...) {
+		return NULL;
+	}
 }
 
 MbTrack
 mb_result_list_get_track(MbResultList list, int index)
 {
-    return (*((TrackResultList *)list))[index]->getTrack();
+	try {
+		return (*((TrackResultList *)list))[index]->getTrack();
+	}
+	catch (...) {
+		return NULL;
+	}
 }
 
 MB_API MbResultList
 mb_query_get_artists(MbQuery q, MbArtistFilter flt)
 {
 	Query *query = (Query *)q;
-	ArtistResultList *results = new ArtistResultList(query->getArtists((ArtistFilter *)flt));
-    return (MbResultList)results;
+	try {
+		ArtistResultList *results = new ArtistResultList(query->getArtists((ArtistFilter *)flt));
+    	return (MbResultList)results;
+	}
+	catch (...) {
+		return NULL;
+	}
 }
 
 MB_API MbResultList
 mb_query_get_releases(MbQuery q, MbReleaseFilter flt)
 {
 	Query *query = (Query *)q;
-	ReleaseResultList *results = new ReleaseResultList(query->getReleases((ReleaseFilter *)flt));
-    return (MbResultList)results;
+	try {
+		ReleaseResultList *results = new ReleaseResultList(query->getReleases((ReleaseFilter *)flt));
+	    return (MbResultList)results;
+	}
+	catch (...) {
+		return NULL;
+	}
 }
 
 MB_API MbResultList
 mb_query_get_tracks(MbQuery q, MbTrackFilter flt)
 {
 	Query *query = (Query *)q;
-	TrackResultList *results = new TrackResultList(query->getTracks((TrackFilter *)flt));
-    return (MbResultList)results;
+	try {
+		TrackResultList *results = new TrackResultList(query->getTracks((TrackFilter *)flt));
+	    return (MbResultList)results;
+	}
+	catch (...) {
+		return NULL;
+	}
 }
 
 
