diff --git a/plugins/text-freetype2/text-functionality.c b/plugins/text-freetype2/text-functionality.c
index 4b885f0bdbd81e288c0a845e314236dc18583271..182b7a5c55bf2fb0dab1b9fdac9405a43ccab9ff 100644
--- a/plugins/text-freetype2/text-functionality.c
+++ b/plugins/text-freetype2/text-functionality.c
@@ -34,6 +34,10 @@ void draw_outlines(struct ft2_source *srcdata)
 	uint32_t *tmp;
 
 	struct gs_vb_data *vdata = gs_vertexbuffer_get_data(srcdata->vbuf);
+
+	if (!srcdata->text)
+		return;
+
 	tmp = vdata->colors;
 	vdata->colors = srcdata->colorbuf;
 
@@ -57,6 +61,10 @@ void draw_drop_shadow(struct ft2_source *srcdata)
 	uint32_t *tmp;
 
 	struct gs_vb_data *vdata = gs_vertexbuffer_get_data(srcdata->vbuf);
+
+	if (!srcdata->text)
+		return;
+
 	tmp = vdata->colors;
 	vdata->colors = srcdata->colorbuf;
 
@@ -75,6 +83,9 @@ void set_up_vertex_buffer(struct ft2_source *srcdata)
 	FT_UInt glyph_index = 0;
 	uint32_t x = 0, space_pos = 0, word_width = 0;
 
+	if (!srcdata->text)
+		return;
+
 	if (srcdata->custom_width >= 100)
 		srcdata->cx = srcdata->custom_width;
 	else
@@ -128,7 +139,8 @@ skip_word_wrap:;
 void fill_vertex_buffer(struct ft2_source *srcdata)
 {
 	struct gs_vb_data *vdata = gs_vertexbuffer_get_data(srcdata->vbuf);
-	if (vdata == NULL) return;
+	if (vdata == NULL || !srcdata->text) return;
+
 	struct vec2 *tvarray = (struct vec2 *)vdata->tvarray[0].array;
 	uint32_t *col = (uint32_t *)vdata->colors;
 
@@ -454,6 +466,9 @@ uint32_t get_ft2_text_width(wchar_t *text, struct ft2_source *srcdata)
 	FT_UInt glyph_index = 0;
 	uint32_t w = 0, max_w = 0;
 
+	if (!text)
+		return 0;
+
 	for (uint32_t i = 0; i < (uint32_t)wcslen(text); i++) {
 		glyph_index = FT_Get_Char_Index(srcdata->font_face, text[i]);
 		FT_Load_Glyph(srcdata->font_face, glyph_index, FT_LOAD_DEFAULT);