Phong Shading giving a black line

I’ve had this problem before, I think its because of normals. If anyone knows how to fix this, or add normals to my existing block batch, let me know.

Block.java

package passage.games;

import java.nio.FloatBuffer;

import org.lwjgl.BufferUtils;
import org.lwjgl.util.vector.Vector3f;

import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.opengl.GL15.*;

public class Block {
	public Vector3f location;
	public Vector3f rotation;
	
	private int vertexPointer;
	private int colorPointer;
	
	private FloatBuffer vertexBuffer;
	private FloatBuffer colorBuffer;
	
	private Shader boxShader;
		
	private float[] vertexData = {
	    -1.0f,-1.0f,-1.0f,
	    -1.0f,-1.0f, 1.0f,
	    -1.0f, 1.0f, 1.0f,
	    
	    1.0f, 1.0f,-1.0f,
	    -1.0f,-1.0f,-1.0f,
	    -1.0f, 1.0f,-1.0f,
	    
	    1.0f,-1.0f, 1.0f,
	    -1.0f,-1.0f,-1.0f,
	    1.0f,-1.0f,-1.0f,
	    
	    1.0f, 1.0f,-1.0f,
	    1.0f,-1.0f,-1.0f,
	    -1.0f,-1.0f,-1.0f,
	    
	    -1.0f,-1.0f,-1.0f,
	    -1.0f, 1.0f, 1.0f,
	    -1.0f, 1.0f,-1.0f,
	    
	    1.0f,-1.0f, 1.0f,
	    -1.0f,-1.0f, 1.0f,
	    -1.0f,-1.0f,-1.0f,
	    
	    -1.0f, 1.0f, 1.0f,
	    -1.0f,-1.0f, 1.0f,
	    1.0f,-1.0f, 1.0f,
	    
	    1.0f, 1.0f, 1.0f,
	    1.0f,-1.0f,-1.0f,
	    1.0f, 1.0f,-1.0f,
	    
	    1.0f,-1.0f,-1.0f,
	    1.0f, 1.0f, 1.0f,
	    1.0f,-1.0f, 1.0f,
	    
	    1.0f, 1.0f, 1.0f,
	    1.0f, 1.0f,-1.0f,
	    -1.0f, 1.0f,-1.0f,
	    
	    1.0f, 1.0f, 1.0f,
	    -1.0f, 1.0f,-1.0f,
	    -1.0f, 1.0f, 1.0f,
	    
	    1.0f,  1.0f, 1.0f,
	    -1.0f, 1.0f, 1.0f,
	    1.0f, -1.0f, 1.0f
	};
	
	public float[] colorData = {
		0.583f,  0.771f,  0.014f,
	    0.609f,  0.115f,  0.436f,
	    0.327f,  0.483f,  0.844f,
	    
	    0.822f,  0.569f,  0.201f,
	    0.435f,  0.602f,  0.223f,
	    0.310f,  0.747f,  0.185f,
	    
	    0.597f,  0.770f,  0.761f,
	    0.559f,  0.436f,  0.730f,
	    0.359f,  0.583f,  0.152f,
	    
	    0.483f,  0.596f,  0.789f,
	    0.559f,  0.861f,  0.639f,
	    0.195f,  0.548f,  0.859f,
	    
	    0.014f,  0.184f,  0.576f,
	    0.771f,  0.328f,  0.970f,
	    0.406f,  0.615f,  0.116f,
	    
	    0.676f,  0.977f,  0.133f,
	    0.971f,  0.572f,  0.833f,
	    0.140f,  0.616f,  0.489f,
	    
	    0.997f,  0.513f,  0.064f,
	    0.945f,  0.719f,  0.592f,
	    0.543f,  0.021f,  0.978f,
	    
	    0.279f,  0.317f,  0.505f,
	    0.167f,  0.620f,  0.077f,
	    0.347f,  0.857f,  0.137f,
	    
	    0.055f,  0.953f,  0.042f,
	    0.714f,  0.505f,  0.345f,
	    0.783f,  0.290f,  0.734f,
	    
	    0.722f,  0.645f,  0.174f,
	    0.302f,  0.455f,  0.848f,
	    0.225f,  0.587f,  0.040f,
	    
	    0.517f,  0.713f,  0.338f,
	    0.053f,  0.959f,  0.120f,
	    0.393f,  0.621f,  0.362f,
	    
	    0.673f,  0.211f,  0.457f,
	    0.820f,  0.883f,  0.371f,
	    0.982f,  0.099f,  0.879f,
	};
	
	public Block(Vector3f location, Vector3f rotation){
		this.location = location;
		this.rotation = rotation;
	}
	
	public Block(Vector3f location){
		this.location = location;
		this.rotation = new Vector3f(0, 0, 0);
	}
	
	public Block(){
		this.location = new Vector3f(0, 0, 0);
		this.rotation = new Vector3f(0, 0, 0);
	}
	
	public void init(){
		vertexBuffer = BufferUtils.createFloatBuffer(108);
		vertexBuffer.put(vertexData);
		vertexBuffer.flip();
		
		colorBuffer = BufferUtils.createFloatBuffer(108);
		colorBuffer.put(colorData);
		colorBuffer.flip();
		
		vertexPointer = glGenBuffers();
		glBindBuffer(GL_ARRAY_BUFFER, vertexPointer);
		glBufferData(GL_ARRAY_BUFFER, vertexBuffer, GL_STATIC_DRAW);
		glBindBuffer(GL_ARRAY_BUFFER, 0);

		colorPointer = glGenBuffers();
		glBindBuffer(GL_ARRAY_BUFFER, colorPointer);
		glBufferData(GL_ARRAY_BUFFER, colorBuffer, GL_STATIC_DRAW);
		glBindBuffer(GL_ARRAY_BUFFER, 0);
		
		boxShader = new Shader();
		boxShader.attachVertexShader("./assets/box.vert");
		boxShader.attachFragmentShader("./assets/box.frag");
		boxShader.link();
	}
	
	public void render(){
		boxShader.bind();
			glPushMatrix();
				
				glTranslatef(location.x, location.y, location.z);
				
				glRotatef(rotation.x, 1, 0, 0);
				glRotatef(rotation.y, 0, 1, 0);
				glRotatef(rotation.z, 0, 0, 1);
				
				glEnableClientState(GL_VERTEX_ARRAY);
				glEnableClientState(GL_COLOR_ARRAY);
				
				glBindBuffer(GL_ARRAY_BUFFER, vertexPointer);
				glVertexPointer(3, GL_FLOAT, 0, 0);
				
				glBindBuffer(GL_ARRAY_BUFFER, colorPointer);
				glColorPointer(3, GL_FLOAT, 0, 0);
				
				glDrawArrays(GL_TRIANGLES, 0, 12 * 3);
				
				glDisableClientState(GL_VERTEX_ARRAY);
				glDisableClientState(GL_COLOR_ARRAY);
			glPopMatrix();
		boxShader.unbind();
	}
	
	public void update(){
		
	}
	
	public void destroy(){
		glDeleteBuffers(vertexPointer);
		glDeleteBuffers(colorPointer);
	}
}

Vertex shader

varying vec3 normal; //Normal data (not setup through batch yet)
varying vec3 vertex; //Vertex location for next stage

void main(){
	vertex = vec3(gl_ModelViewMatrix * gl_Vertex); //Vertex location init
    normal = normalize(gl_NormalMatrix * gl_Normal); //Normal data init

    gl_FrontColor = gl_Color; //Vertex color for next stage
	gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex; //Final position using built-in matrices because I'm lazy :P
}

Fragment shader

uniform vec3 lightLocation; //Just set to 10, 10, 10 in the game class
vec3 lightColor = vec3(100, 100, 100); //The lights color

varying vec3 normal; //Normal (not setup through batch yet)
varying vec3 vertex; //Vertex from last stage

void main(){
	vec3 light = normalize(lightLocation.xyz - vertex); //Normalize length between the light location, and vertex location
    vec4 diffuse = vec4(lightColor, 1.0) * max(dot(normal, light), 0.0); //Diffuse color (light color)
    diffuse = clamp(diffuse, 0.0, 1.0); //Final light color

    gl_FragColor = gl_Color * diffuse; //Vertex color + light color
}

My end result: