diff --git a/packages/model/meta_transaction/meta_transaction.go b/packages/model/meta_transaction/meta_transaction.go
index 45550786ca7383277ca6d194aa06629477658a7c..59c546ea97e85bc57b7daedd3479c7a92368075e 100644
--- a/packages/model/meta_transaction/meta_transaction.go
+++ b/packages/model/meta_transaction/meta_transaction.go
@@ -56,8 +56,11 @@ func FromTrits(trits trinary.Trits) *MetaTransaction {
 	}
 }
 
-func FromBytes(bytes []byte) (result *MetaTransaction) {
+func FromBytes(bytes []byte) (result *MetaTransaction, err error) {
 	trits := trinary.MustBytesToTrits(bytes)
+	if len(trits) < MARSHALED_TOTAL_SIZE {
+		return nil, fmt.Errorf("invalid size %v", len(trits))
+	}
 	result = FromTrits(trits[:MARSHALED_TOTAL_SIZE])
 	result.bytes = bytes
 
diff --git a/packages/model/meta_transaction/meta_transaction_test.go b/packages/model/meta_transaction/meta_transaction_test.go
index fa6ec565255b903bd4e917b631873c54696230ba..7a349f2d0e3d928f53960c2f917b6cd84cbf93f1 100644
--- a/packages/model/meta_transaction/meta_transaction_test.go
+++ b/packages/model/meta_transaction/meta_transaction_test.go
@@ -47,7 +47,9 @@ func TestMetaTransaction_SettersGetters(t *testing.T) {
 	assert.Equal(t, tx.IsHead(), head)
 	assert.Equal(t, tx.IsTail(), tail)
 	assert.Equal(t, tx.GetTransactionType(), transactionType)
-	assert.Equal(t, tx.GetHash(), FromBytes(tx.GetBytes()).GetHash())
+	metaTx, err := FromBytes(tx.GetBytes())
+	require.NoError(t, err)
+	assert.Equal(t, tx.GetHash(), metaTx.GetHash())
 
 	assert.EqualValues(t, "KKDVHBENVLQUNO9WOWWEJPBBHUSYRSRKIMZWCFCDB9RYZKYWLAYWRIBRQETBFKE9TIVWQPCKFWAMCLCAV", tx.GetHash())
 }
diff --git a/plugins/tangle/solidifier.go b/plugins/tangle/solidifier.go
index 02d84440969ce18efcef093e23ea8e3c6e897d92..0c274c491c13bf1a94384d9b51922894b0d59555 100644
--- a/plugins/tangle/solidifier.go
+++ b/plugins/tangle/solidifier.go
@@ -42,8 +42,12 @@ func configureSolidifier() {
 	requestedTxs = NewUnsolidTxs()
 
 	gossip.Events.TransactionReceived.Attach(events.NewClosure(func(ev *gossip.TransactionReceivedEvent) {
-		metaTx := meta_transaction.FromBytes(ev.Data)
-		if err := metaTx.Validate(); err != nil {
+		metaTx, err := meta_transaction.FromBytes(ev.Data)
+		if err != nil {
+			log.Warnf("invalid transaction: %s", err)
+			return
+		}
+		if err = metaTx.Validate(); err != nil {
 			log.Warnf("invalid transaction: %s", err)
 			return
 		}
diff --git a/plugins/tangle/solidifier_test.go b/plugins/tangle/solidifier_test.go
index 28a63bc25a1fdcd79f16fb2f82d2b66380088ae5..9cd09962987473549f83edbc520c86e1bc62b653 100644
--- a/plugins/tangle/solidifier_test.go
+++ b/plugins/tangle/solidifier_test.go
@@ -131,7 +131,11 @@ func TestTangle(t *testing.T) {
 
 // transactionReceived mocks the TransactionReceived event by allowing lower mwm
 func transactionReceived(ev *gossip.TransactionReceivedEvent) {
-	metaTx := meta_transaction.FromBytes(ev.Data)
+	metaTx, err := meta_transaction.FromBytes(ev.Data)
+	if err != nil {
+		log.Warnf("invalid transaction: %s", err)
+		return
+	}
 	if metaTx.GetWeightMagnitude() < testMWM {
 		log.Warnf("invalid weight magnitude: %d / %d", metaTx.GetWeightMagnitude(), testMWM)
 		return